On Mon, 21 Mar 2005, Donovan Baarda wrote:

> > > The only ways to ensure that a select process does not block like this,
> > > without using non-blocking mode, are;

> > 3) Use os.read / os.write.
> [...]
>
> but os.read / os.write will block too.

No.

>Try it... replace the file
> read/writes in selector.py. They will only do partial reads if the file is
> put into non-blocking mode.

I've just tried it; I replaced:

data = o.read(BUFF_SIZE)

with:

data = os.read(o.fileno(), BUFF_SIZE)

Works for me without any hangs. Another example is the subprocess module,
which does not use non-blocking mode in any way. (If you are using pipes,
however, you shouldn't write more than PIPE_BUF bytes in each write.)


> > > I think the fread/fwrite and read/write behaviour is posix standard and
> > > possibly C standard stuff... so it _should_ be the same on other
> > > platforms.
> >
> > Sorry if I've misunderstood your point, but fread()/fwrite() does not
> > return EAGAIN.
>
> no, fread()/fwrite() will return 0 if nothing was read/written, and ferror()
> will return EAGAIN to indicated that it was a "would block" condition.... at
> least I think it does... the man page simply says ferror() returns a
> non-zero value.

fread() should loop internally on EAGAIN, in blocking mode.



/Peter Åstrand <[EMAIL PROTECTED]>

_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to