diff -r 325aec842e3e Lib/multiprocessing/queues.py --- a/Lib/multiprocessing/queues.py Wed Feb 25 10:12:26 2015 -0500 +++ b/Lib/multiprocessing/queues.py Fri Feb 27 23:25:34 2015 -0600 @@ -44,10 +44,10 @@ 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 @@ @staticmethod def _feed(buffer, notempty, send, writelock, close): debug('starting thread to feed data to pipe') - from .util import is_exiting - nacquire = notempty.acquire nrelease = notempty.release nwait = notempty.wait diff -r 325aec842e3e Lib/test/test_multiprocessing.py --- a/Lib/test/test_multiprocessing.py Wed Feb 25 10:12:26 2015 -0500 +++ b/Lib/test/test_multiprocessing.py Fri Feb 27 23:25:34 2015 -0600 @@ -620,6 +620,33 @@ for p in workers: p.join() + def test_no_import_lock_contention(self): + import textwrap + + module_name = 'imported_by_an_imported_module' + filename = module_name + ".py" + script = """ + import multiprocessing + + q = multiprocessing.Queue() + q.put('knock knock') + q.get(timeout=3) + q.close() + """ + with open(filename, 'w') as f: + f.write(textwrap.dedent(script)) + self.addCleanup(test_support.unlink, filename) + + try: + sys.path.append(os.getcwd()) + try: + __import__(module_name) + except Queue.Empty: + self.fail("Probable regression on import lock contention;" + " see Issue 22853") + finally: + self.assertEqual(sys.path.pop(), os.getcwd()) + # # #