Hrvoje Niksic <[EMAIL PROTECTED]> writes: > I believe you stil misunderstand. The select module doesn't provide > an inteface to aio(3). It provides an interface to select() and > poll() system calls, which don't provide asynchronous access to > regular files.
It occurred to me that I didn't provide an example of what I mean by select not providing asynchronous access to regular files. Using this code: >>> import os, select >>> fd = os.open('/mnt/custom/x.jpg', os.O_RDONLY) >>> fd 3 # /mnt/custom is an SMB or NFS mount. At this point, kill -STOP the # SMB server. >>> select.select([fd], [], [], 10) # test whether fd is readable ([3], [], []) # exits immediately, assume >>> os.read(3, 1024) ... hangs until smb server continues ... The thing is, select() *always* returns immediately on regular files, even if they are in fact not readable or writable. In this case, select() claimed the file descriptor to be readable when in fact it wasn't. The same is the case with poll, but not with aio. In most cases this isn't a problem, but it does mean that an application that reads from a network-share-located file in a select/poll-driven event loop will stall until the file server responds. Threads, on the other hand, don't have this problem. A program that reads the file in a separate thread will not block even if the file is on a temporarily non-responding NFS server. -- http://mail.python.org/mailman/listinfo/python-list