after_in_parent=_global_shutdown_lock.release)
-class _WorkItem(object):
+class _WorkItem:
def __init__(self, future, fn, args, kwargs):
self.future = future
self.fn = fn
return
try:
while True:
- work_item = work_queue.get(block=True)
- if work_item is not None:
- work_item.run()
- # Delete references to object. See issue16284
- del work_item
-
- # attempt to increment idle count
+ try:
+ work_item = work_queue.get_nowait()
+ except queue.Empty:
+ # attempt to increment idle count if queue is empty
executor = executor_reference()
if executor is not None:
executor._idle_semaphore.release()
del executor
+ work_item = work_queue.get(block=True)
+
+ if work_item is not None:
+ work_item.run()
+ # Delete references to object. See GH-60488
+ del work_item
continue
executor = executor_reference()