raise TypeError("initializer must be a callable")
self._max_workers = max_workers
- self._work_queue = queue.Queue()
+ self._work_queue = queue.SimpleQueue()
self._threads = set()
self._broken = False
self._shutdown = False
maxtasksperchild=None, context=None):
self._ctx = context or get_context()
self._setup_queues()
- self._taskqueue = queue.Queue()
+ self._taskqueue = queue.SimpleQueue()
self._cache = {}
self._state = RUN
self._maxtasksperchild = maxtasksperchild
Pool.__init__(self, processes, initializer, initargs)
def _setup_queues(self):
- self._inqueue = queue.Queue()
- self._outqueue = queue.Queue()
+ self._inqueue = queue.SimpleQueue()
+ self._outqueue = queue.SimpleQueue()
self._quick_put = self._inqueue.put
self._quick_get = self._outqueue.get
@staticmethod
def _help_stuff_finish(inqueue, task_handler, size):
- # put sentinels at head of inqueue to make workers finish
- with inqueue.not_empty:
- inqueue.queue.clear()
- inqueue.queue.extend([None] * size)
- inqueue.not_empty.notify_all()
+ # drain inqueue, and put sentinels at its head to make workers finish
+ try:
+ while True:
+ inqueue.get(block=False)
+ except queue.Empty:
+ pass
+ for i in range(size):
+ inqueue.put(None)