cpython: f5aed0dba844 (original) (raw)

--- a/Doc/library/sched.rst +++ b/Doc/library/sched.rst @@ -27,6 +27,9 @@ scheduler: .. versionchanged:: 3.3 timefunc and delayfunc parameters are optional.

Example:: @@ -47,33 +50,6 @@ Example:: From print_time 930343700.273 930343700.276 -In multi-threaded environments, the :class:scheduler class has limitations -with respect to thread-safety, inability to insert a new task before -the one currently pending in a running scheduler, and holding up the main -thread until the event queue is empty. Instead, the preferred approach -is to use the :class:threading.Timer class instead. - -Example:: -

- - .. _scheduler-objects: Scheduler Objects

--- a/Doc/whatsnew/3.3.rst +++ b/Doc/whatsnew/3.3.rst @@ -662,6 +662,10 @@ should be used. For example, this will sched ----- +* :class:~sched.scheduler class can now be safely used in multi-threaded

--- a/Lib/sched.py +++ b/Lib/sched.py @@ -30,6 +30,7 @@ has another way to reference private dat import time import heapq +import threading from collections import namedtuple all = ["scheduler"] @@ -48,6 +49,7 @@ class scheduler: """Initialize a new instance, passing the time and delay functions""" self._queue = []

@@ -58,9 +60,10 @@ class scheduler: if necessary. """

def enter(self, delay, priority, action, argument=[], kwargs={}): """A variant that specifies the time as a relative time. @@ -68,8 +71,9 @@ class scheduler: This is actually the more commonly used interface. """

def cancel(self, event): """Remove an event from the queue. @@ -78,12 +82,14 @@ class scheduler: If the event is not in the queue, this raises ValueError. """

def empty(self): """Check whether the queue is empty."""

def run(self): """Execute events until the queue is empty. @@ -108,24 +114,25 @@ class scheduler: """ # localize variable access to minimize overhead # and to improve thread safety

@property def queue(self): @@ -138,5 +145,6 @@ class scheduler: # Use heapq to sort the queue rather than using 'sorted(self._queue)'. # With heapq, two events scheduled at the same time will show in # the actual order they would be retrieved.

--- a/Misc/NEWS +++ b/Misc/NEWS @@ -409,6 +409,9 @@ Core and Builtins Library ------- +- Issue #8684 sched.scheduler class can be safely used in multi-threaded