diff -r bc322469a7a8 Doc/library/sched.rst --- a/Doc/library/sched.rst Mon Dec 10 20:22:55 2012 -0800 +++ b/Doc/library/sched.rst Tue Dec 11 21:43:56 2012 +0200 @@ -35,19 +35,22 @@ >>> import sched, time >>> s = sched.scheduler(time.time, time.sleep) - >>> def print_time(): print("From print_time", time.time()) + >>> def print_time(a='default'): + ... print("From print_time", time.time(), a) ... >>> def print_some_times(): ... print(time.time()) - ... s.enter(5, 1, print_time, ()) - ... s.enter(10, 1, print_time, ()) + ... s.enter(10, 1, print_time) + ... s.enter(5, 2, print_time, argument=('positional',)) + ... s.enter(5, 1, print_time, kwargs={'a': 'keyword'}) ... s.run() ... print(time.time()) ... >>> print_some_times() 930343690.257 - From print_time 930343695.274 - From print_time 930343700.273 + From print_time 930343695.274 positional + From print_time 930343695.275 keyword + From print_time 930343700.273 default 930343700.276 .. _scheduler-objects: @@ -58,7 +61,7 @@ :class:`scheduler` instances have the following methods and attributes: -.. method:: scheduler.enterabs(time, priority, action, argument=[], kwargs={}) +.. method:: scheduler.enterabs(time, priority, action, argument=(), kwargs={}) Schedule a new event. The *time* argument should be a numeric type compatible with the return value of the *timefunc* function passed to the constructor. @@ -66,8 +69,10 @@ *priority*. Executing the event means executing ``action(*argument, **kwargs)``. - *argument* must be a sequence holding the parameters for *action*. - *kwargs* must be a dictionary holding the keyword parameters for *action*. + Optional *argument* argument must be a sequence holding the parameters + for *action* if any used. + Optional *kwargs* argument must be a dictionary holding the keyword + parameters for *action* if any used. Return value is an event which may be used for later cancellation of the event (see :meth:`cancel`). @@ -79,7 +84,7 @@ *kwargs* parameter was added. -.. method:: scheduler.enter(delay, priority, action, argument=[], kwargs={}) +.. method:: scheduler.enter(delay, priority, action, argument=(), kwargs={}) Schedule an event for *delay* more time units. Other than the relative time, the other arguments, the effect and the return value are the same as those for diff -r bc322469a7a8 Lib/sched.py --- a/Lib/sched.py Mon Dec 10 20:22:55 2012 -0800 +++ b/Lib/sched.py Tue Dec 11 21:43:56 2012 +0200 @@ -50,6 +50,8 @@ def __gt__(s, o): return (s.time, s.priority) > (o.time, o.priority) def __ge__(s, o): return (s.time, s.priority) >= (o.time, o.priority) +_sentinel = object() + class scheduler: def __init__(self, timefunc=_time, delayfunc=time.sleep): @@ -60,19 +62,21 @@ self.timefunc = timefunc self.delayfunc = delayfunc - def enterabs(self, time, priority, action, argument=[], kwargs={}): + def enterabs(self, time, priority, action, argument=(), kwargs=_sentinel): """Enter a new event in the queue at an absolute time. Returns an ID for the event which can be used to remove it, if necessary. """ + if kwargs is _sentinel: + kwargs = {} with self._lock: event = Event(time, priority, action, argument, kwargs) heapq.heappush(self._queue, event) return event # The ID - def enter(self, delay, priority, action, argument=[], kwargs={}): + def enter(self, delay, priority, action, argument=(), kwargs=_sentinel): """A variant that specifies the time as a relative time. This is actually the more commonly used interface.