diff options
author | Michael W. Hudson <mwh@python.net> | 2004-06-30 09:02:33 (GMT) |
---|---|---|
committer | Michael W. Hudson <mwh@python.net> | 2004-06-30 09:02:33 (GMT) |
commit | d5cf14348269f1faf06322a8c159cc50e98e736b (patch) | |
tree | be46ee57944cdb6d89b9483a65efce83b1fbaab2 | |
parent | 96b935e6435ea9928f3a11732d07ecfbb9a671d1 (diff) | |
download | cpython-d5cf14348269f1faf06322a8c159cc50e98e736b.zip cpython-d5cf14348269f1faf06322a8c159cc50e98e736b.tar.gz cpython-d5cf14348269f1faf06322a8c159cc50e98e736b.tar.bz2 |
Check in the updated version of patch #957240, which doesn't rely
on the marshalling characteristics of infinities.
-rw-r--r-- | Doc/lib/libasyncore.tex | 28 | ||||
-rw-r--r-- | Lib/asyncore.py | 13 |
2 files changed, 24 insertions, 17 deletions
diff --git a/Doc/lib/libasyncore.tex b/Doc/lib/libasyncore.tex index 89c71781..ee50d18 100644 --- a/Doc/lib/libasyncore.tex +++ b/Doc/lib/libasyncore.tex @@ -44,20 +44,20 @@ channel (including any that have been added to the map during asynchronous service) is closed. \begin{funcdesc}{loop}{\optional{timeout\optional{, use_poll\optional{, - map}}}} - Enter a polling loop that only terminates after all open channels - have been closed. All arguments are optional. The \var{timeout} - argument sets the timeout parameter for the appropriate - \function{select()} or \function{poll()} call, measured in seconds; - the default is 30 seconds. The \var{use_poll} parameter, if true, - indicates that \function{poll()} should be used in preference to - \function{select()} (the default is \code{False}). The \var{map} parameter - is a dictionary whose items are the channels to watch. As channels - are closed they are deleted from their map. If \var{map} is - omitted, a global map is used (this map is updated by the default - class \method{__init__()} - -- make sure you extend, rather than override, \method{__init__()} - if you want to retain this behavior). + map\optional{,count}}}}} + Enter a polling loop that terminates after count passes or all open + channels have been closed. All arguments are optional. The \var(count) + parameter defaults to None, resulting in the loop terminating only + when all channels have been closed. The \var{timeout} argument sets the + timeout parameter for the appropriate \function{select()} or + \function{poll()} call, measured in seconds; the default is 30 seconds. + The \var{use_poll} parameter, if true, indicates that \function{poll()} + should be used in preference to \function{select()} (the default is + \code{False}). The \var{map} parameter is a dictionary whose items are + the channels to watch. As channels are closed they are deleted from their + map. If \var{map} is omitted, a global map is used (this map is updated + by the default class \method{__init__()} -- make sure you extend, rather + than override, \method{__init__()} if you want to retain this behavior). Channels (instances of \class{asyncore.dispatcher}, \class{asynchat.async_chat} and subclasses thereof) can freely be mixed in the map. diff --git a/Lib/asyncore.py b/Lib/asyncore.py index 69318c8..a737728 100644 --- a/Lib/asyncore.py +++ b/Lib/asyncore.py @@ -157,7 +157,7 @@ def poll2(timeout=0.0, map=None): poll3 = poll2 # Alias for backward compatibility -def loop(timeout=30.0, use_poll=False, map=None): +def loop(timeout=30.0, use_poll=False, map=None, count=None): if map is None: map = socket_map @@ -166,8 +166,14 @@ def loop(timeout=30.0, use_poll=False, map=None): else: poll_fun = poll - while map: - poll_fun(timeout, map) + if count is None: + while map: + poll_fun(timeout, map) + + else: + while map and count > 0: + poll_fun(timeout, map) + count = count - 1 class dispatcher: @@ -523,3 +529,4 @@ if os.name == 'posix': self._fileno = fd self.socket = file_wrapper(fd) self.add_channel() + |