summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Doc/lib/libasyncore.tex28
-rw-r--r--Lib/asyncore.py5
-rw-r--r--Misc/NEWS2
3 files changed, 19 insertions, 16 deletions
diff --git a/Doc/lib/libasyncore.tex b/Doc/lib/libasyncore.tex
index 89c717810b..f466fa6bdc 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 69318c88b9..b687fd2cdb 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 86c85864dc..b8ebccc349 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.