[Python-checkins] [3.12] gh-102024: Reduced _idle_semaphore.release calls (GH-102025) (#104959)
gpshead
webhook-mailer at python.org
Fri May 26 02:21:24 EDT 2023
https://github.com/python/cpython/commit/8010cefc45d6763fea0c5950db9237ce42776516
commit: 8010cefc45d6763fea0c5950db9237ce42776516
branch: 3.12
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: gpshead <greg at krypto.org>
date: 2023-05-26T06:21:15Z
summary:
[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 0242e9a57aa87ed0b5cac526f65631c654a39054)
Co-authored-by: Andrii Kuzmin <jack.cvr at gmail.com>
Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com>
Co-authored-by: Shantanu <12621235+hauntsaninja at users.noreply.github.com>
files:
A Misc/NEWS.d/next/Library/2023-02-18-22-55-48.gh-issue-102024.RUmg_D.rst
M Lib/concurrent/futures/thread.py
diff --git a/Lib/concurrent/futures/thread.py b/Lib/concurrent/futures/thread.py
index 51c942f51abd3..3b3a36a509333 100644
--- a/Lib/concurrent/futures/thread.py
+++ b/Lib/concurrent/futures/thread.py
@@ -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()
diff --git a/Misc/NEWS.d/next/Library/2023-02-18-22-55-48.gh-issue-102024.RUmg_D.rst b/Misc/NEWS.d/next/Library/2023-02-18-22-55-48.gh-issue-102024.RUmg_D.rst
new file mode 100644
index 0000000000000..bb9e28e06c555
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2023-02-18-22-55-48.gh-issue-102024.RUmg_D.rst
@@ -0,0 +1 @@
+Reduce calls of ``_idle_semaphore.release()`` in :func:`concurrent.futures.thread._worker`.
More information about the Python-checkins
mailing list