Guido van Rossum wrote: >>>[Brett, about <http://www.python.org/sf/798046>] > > Since Tim thinks it's okay to change (and since I now know what the OP > wanted) you have my blessing to give this a try. > OK, done. I tore out the PyList_Check in select_select() and just put the PySequence_Fast() call in list2set(), which I renamed seq2set(), so as to centralize the code and make managing refcounts simpler. I pasted in an interpreter session at the end of this email showing some checking I did to make sure I didn't botch anything. If someone could double-check them and see if they can think of something I may have missed I would appreciate it. I made the docstring (as seen below) say that the arguments must be sequences since that is what PySequence_Fast says it takes in, although it obviously works with containers. Any objections? Assuming no one can think of anything that I missed I will then commit (with appropriate Misc/NEWS and doc changes), change the bug report to an feature request since that is what it really is, and close it. -Brett [passes test_select...] >>> import test.test_select timeout = 0 'testing...\n' timeout = 1 'testing...\n' timeout = 2 'testing...\n' timeout = 4 'testing...\n' timeout = 8 'testing...\n' timeout = 16 'testing...\n' timeout = None 'testing...\n' timeout = None 'testing...\n' timeout = None 'testing...\n' timeout = None 'testing...\n' timeout = None '' EOF [24363 refs] [works with sets as requested...] >>> from sets import Set [26557 refs] >>> from select import select [26559 refs] >>> read_FILE = file("README", 'r') [26567 refs] >>> write_FILE = file("@test", 'w') [26574 refs] >>> print select(Set([write_FILE]), Set([read_FILE]), [], 0) ([<open file '@test', mode 'w' at 0x5051e0>], [<open file 'README', mode 'r' at 0x486550>], []) [26607 refs] [modified docstring to say it works with sequences...] >>> help(select) Help on built-in function select: select(...) select(rlist, wlist, xlist[, timeout]) -> (rlist, wlist, xlist) Wait until one or more file descriptors are ready for some kind of I/O. The first three arguments are sequences of file descriptors to be waited for: ... [new error message on improper arguments...] >>> print select(1, 2, 3, 0) Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: arguments 1-3 must be sequences [39435 refs] [managed to not screw up refcounts =) ...] >>> print select(Set([write_FILE]), Set([read_FILE]), [], 0) ([<open file '@test', mode 'w' at 0x5051e0>], [<open file 'README', mode 'r' at 0x486550>], []) [39435 refs] >>> print select(Set([write_FILE]), Set([read_FILE]), [], 0) ([<open file '@test', mode 'w' at 0x5051e0>], [<open file 'README', mode 'r' at 0x486550>], []) [39435 refs] [... and of course still works the way it originally did.] >>> print select([write_FILE], [read_FILE], [], 0) ([<open file '@test', mode 'w' at 0x5051e0>], [<open file 'README', mode 'r' at 0x486550>], []) [39435 refs]
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4