mirror of
https://github.com/python/cpython.git
synced 2026-01-07 07:52:29 +00:00
[3.12] gh-102024: Reduced _idle_semaphore.release calls (GH-102025) (#104959)
gh-102024: Reduced _idle_semaphore.release calls (GH-102025)
Reduced _idle_semaphore.release calls in concurrent.futures.thread._worker
_idle_semaphore.release() is now only called if only work_queue is empty.
---------
(cherry picked from commit 0242e9a57a)
Co-authored-by: Andrii Kuzmin <jack.cvr@gmail.com>
Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com>
Co-authored-by: Shantanu <12621235+hauntsaninja@users.noreply.github.com>
This commit is contained in:
parent
5c2971b78f
commit
8010cefc45
2 changed files with 12 additions and 8 deletions
|
|
@ -43,7 +43,7 @@ def _python_exit():
|
|||
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
|
||||
|
|
@ -78,17 +78,20 @@ def _worker(executor_reference, work_queue, initializer, initargs):
|
|||
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()
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
Reduce calls of ``_idle_semaphore.release()`` in :func:`concurrent.futures.thread._worker`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue