waste of resources ?
Diego Dainese
ddainese34x at x22dsi.unive.it
Fri Jun 11 07:30:01 EDT 1999
On Tue, 8 Jun 1999 01:03:03 +0300, Moshe Zadka wrote:
> On 7 Jun 1999, Hrvoje Niksic wrote:
> <about syscalls throwing EINTR and aborting>
> > I don't know about Perl, but a good fix would be to have the
> > interpreter do the hard work for us. If a system call fails and errno
> > is EINTR, then the signal handler should be called, *and* the syscall
> > should be restarted.
>
I'm agree with this also.
> Ummmmm......
>
> You can do the hard-work yourself, but once and for all:
>
Yes, but this is boring ;)
> def myread(file):
> while 1:
> try:
> return file.read()
> except (IOError, os.error), detail:
> if detail.args[0] != errno.EINTR: raise
>
> And just call myread(foo) instead of foo.read().
> Where's the catch-22?
IMHO a better approach is a function like this:
def temp_failure_retry(func, *args):
while 1:
try:
return apply(func, args)
except (IOError, os.error), detail:
if detail.args[0] != errno.EINTR: raise
(the strange function name come from the similar C macro used in the
GNU libc ;)
An example of the use of this function with open:
fd = temp_failure_retry(open, "pippo", "w");
I don't tryed it, but AFAIK it should work.
Bye,
--
d i e g o
--
To reply remove the numbers and the `x' from my address
--
Sorry for my bad English!
More information about the Python-list
mailing list