On 2012-10-29, at 12:07 PM, Antoine Pitrou
To invoke a primitive I/O operation, you call the current task's block() method and then immediately yield (similar to Greg Ewing's approach). There are helpers block_r() and block_w() that arrange for a task to block until a file descriptor is ready for reading/writing. Examples of their use are in sockets.py.
That's weird and kindof ugly IMHO. Why would you write:
scheduling.block_w(self.sock.fileno()) yield
instead of say:
yield scheduling.block_w(self.sock.fileno())
?
I, personally, like and use the second approach. But I believe the main incentive for Guido & Greg to use 'yields' like that is to make one thing *very* clear: always use 'yield from' to call something. 'yield' statement is just an explicit context switch point, and it should be used only for that purpose and only when you write a low-level APIs. - Yury