cpython: 069c13ca7a70 (original) (raw)
Mercurial > cpython
changeset 94885:069c13ca7a70 2.7
Issue #22853: Fixed a deadlock when use multiprocessing.Queue at import time. Patch by Florian Finkernagel and Davin Potts. [#22853]
Serhiy Storchaka storchaka@gmail.com | |
---|---|
date | Fri, 06 Mar 2015 22:17:25 +0200 |
parents | f31b91b6683a |
children | 4ad1ea911fd0 |
files | Lib/multiprocessing/queues.py Lib/test/test_multiprocessing.py Misc/ACKS Misc/NEWS |
diffstat | 4 files changed, 29 insertions(+), 6 deletions(-)[+] [-] Lib/multiprocessing/queues.py 10 Lib/test/test_multiprocessing.py 20 Misc/ACKS 2 Misc/NEWS 3 |
line wrap: on
line diff
--- a/Lib/multiprocessing/queues.py +++ b/Lib/multiprocessing/queues.py @@ -44,10 +44,10 @@ import weakref from Queue import Empty, Full import _multiprocessing -from multiprocessing import Pipe -from multiprocessing.synchronize import Lock, BoundedSemaphore, Semaphore, Condition -from multiprocessing.util import debug, info, Finalize, register_after_fork -from multiprocessing.forking import assert_spawning +from . import Pipe +from .synchronize import Lock, BoundedSemaphore, Semaphore, Condition +from .util import debug, info, Finalize, register_after_fork, is_exiting +from .forking import assert_spawning #
Queue type using a pipe, buffer and thread
@@ -229,8 +229,6 @@ class Queue(object): @staticmethod def _feed(buffer, notempty, send, writelock, close): debug('starting thread to feed data to pipe')
from .util import is_exiting[](#l1.22)
- nacquire = notempty.acquire nrelease = notempty.release nwait = notempty.wait
--- a/Lib/test/test_multiprocessing.py +++ b/Lib/test/test_multiprocessing.py @@ -620,6 +620,26 @@ class _TestQueue(BaseTestCase): for p in workers: p.join()
- def test_no_import_lock_contention(self):
with test_support.temp_cwd():[](#l2.8)
module_name = 'imported_by_an_imported_module'[](#l2.9)
with open(module_name + '.py', 'w') as f:[](#l2.10)
f.write("""if 1:[](#l2.11)
import multiprocessing[](#l2.12)
q = multiprocessing.Queue()[](#l2.14)
q.put('knock knock')[](#l2.15)
q.get(timeout=3)[](#l2.16)
q.close()[](#l2.17)
""")[](#l2.18)
with test_support.DirsOnSysPath(os.getcwd()):[](#l2.20)
try:[](#l2.21)
__import__(module_name)[](#l2.22)
except Queue.Empty:[](#l2.23)
self.fail("Probable regression on import lock contention;"[](#l2.24)
" see Issue #22853")[](#l2.25)
--- a/Misc/ACKS +++ b/Misc/ACKS @@ -411,6 +411,7 @@ Vincent Fiack Anastasia Filatova Tomer Filiba Jeffrey Finkelstein +Florian Finkernagel Russell Finn Dan Finnie Nils Fischbeck @@ -1073,6 +1074,7 @@ Martin Pool Iustin Pop Claudiu Popa John Popplewell +Davin Potts Guillaume Pratte Amrit Prem Paul Prescod
--- a/Misc/NEWS +++ b/Misc/NEWS @@ -18,6 +18,9 @@ Core and Builtins Library ------- +- Issue #22853: Fixed a deadlock when use multiprocessing.Queue at import time.