From eac324b90bc76c5c8e305d567c40d53e3440593e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20v=2E=20L=C3=B6wis?= Date: Thu, 3 Jun 2004 09:18:35 +0000 Subject: Patch #957240: Add count parameter to asyncore.loop. --- Doc/lib/libasyncore.tex | 28 ++++++++++++++-------------- Lib/asyncore.py | 5 +++-- Misc/NEWS | 2 ++ 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/Doc/lib/libasyncore.tex b/Doc/lib/libasyncore.tex index 89c71781..f466fa6 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 infinity, 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..b687fd2 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=1e309): if map is None: map = socket_map @@ -166,8 +166,9 @@ def loop(timeout=30.0, use_poll=False, map=None): else: poll_fun = poll - while map: + while map and count >= 0: poll_fun(timeout, map) + count = count - 1 class dispatcher: diff --git a/Misc/NEWS b/Misc/NEWS index 86c8586..b8ebccc 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -319,6 +319,8 @@ Extension modules Library ------- +- asyncore.loop now has repeat count parameter that defaults to infinity. + - The distutils sdist command now ignores all .svn directories, in addition to CVS and RCS directories. .svn directories hold administrative files for the Subversion source control system. -- cgit v0.12