This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2014年11月12日 12:29 by ffinkernagel, last changed 2022年04月11日 14:58 by admin. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| show_queue_import_bug.py | ffinkernagel, 2014年11月12日 12:29 | |||
| issue_22853_fix_and_test_import_lock_in_queue_py27.patch | davin, 2015年02月28日 05:40 | Florian's fix and a matching test for 2.7 | review | |
| issue_22853_only_test_import_lock_in_queue_py34_and_py35.patch | davin, 2015年02月28日 05:41 | Ignore -- replaced by newer patch file. | review | |
| issue_22853_revised_only_test_import_lock_in_queue_py34_and_py35.patch | davin, 2015年03月06日 21:25 | Regression test-only for 3.4 and 3.5 (both), replaces prior patch for 3.[4-5]. | review | |
| Messages (12) | |||
|---|---|---|---|
| msg231073 - (view) | Author: Florian Finkernagel (ffinkernagel) * | Date: 2014年11月12日 12:29 | |
If you import a module that creates a multiprocessing.Queue, puts a value, and then waits for to be received again from the queue, you run into a deadlock. The issue is that Queue._feed does 'from .util import is_existing' - which needs the import lock, but is still being held by the main thread. Attached a script that illustrates this. Patch is a two line change, import is_exiting in line 49, remove the import inside the thread: 49c49 < from multiprocessing.util import debug, info, Finalize, register_after_fork --- > from multiprocessing.util import debug, info, Finalize, register_after_fork, is_exiting 232d231 < from .util import is_exiting |
|||
| msg236790 - (view) | Author: Mark Lawrence (BreamoreBoy) * | Date: 2015年02月27日 17:05 | |
@Davin I believe that you're interested in multiprocessing issues. |
|||
| msg236854 - (view) | Author: Davin Potts (davin) * (Python committer) | Date: 2015年02月27日 23:12 | |
Confirmed that the issue can be reproduced under 2.7.9 on OS X 10.10. It is not possible to reproduce the issue with default (3.5) -- taking a look at what's different there, notably the import of is_exiting has moved to the top of the queues module and is no longer only imported at the time Queue._feed is invoked, which is just as Florian advocates doing for 2.7. I should take a closer look to understand what else has changed. @Mark: Cool -- thanks. |
|||
| msg236865 - (view) | Author: Davin Potts (davin) * (Python committer) | Date: 2015年02月28日 05:40 | |
Attaching a patch for 2.7 that applies Florian's fix and provides a test for it as well. Although the issue is not triggered on 3.4 or default (3.5), there is the potential for regression there -- attaching a single patch that works for both 3.4 and 3.5 to provide a regression test (only a test, nothing to "fix"). These patches have been tested on OS X 10.10 and Ubuntu 12.04.5 64-bit for each of 2.7, 3.4, and default (3.5). |
|||
| msg237375 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2015年03月06日 19:59 | |
I'm not sure there is a need to fix this issue. Using multiprocessing Queue at import time looks as yet one way to shoot yourself in the foot. But the patch looks harmful, I'll commit it. |
|||
| msg237376 - (view) | Author: Mark Lawrence (BreamoreBoy) * | Date: 2015年03月06日 20:06 | |
That's all we need, harmful patches being committed :) Harmless possibly? |
|||
| msg237377 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2015年03月06日 20:21 | |
Oh, right. Harmless. Thanks for all the fish Mark. I meant the bug. |
|||
| msg237378 - (view) | Author: Roundup Robot (python-dev) (Python triager) | Date: 2015年03月06日 20:34 | |
New changeset 069c13ca7a70 by Serhiy Storchaka in branch '2.7': Issue #22853: Fixed a deadlock when use multiprocessing.Queue at import time. https://hg.python.org/cpython/rev/069c13ca7a70 |
|||
| msg237379 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2015年03月06日 20:49 | |
As for 3.x, underscored test does not run, and when remove the underscore it runs, but produce a warning (you should run regrtests with -vv to see detailed warnings): $ ./python -m test.regrtest -vv -m '*no_import_lock_contention*' test_multiprocessing_spawn ... Warning -- threading._dangling was modified by test_multiprocessing_spawn Before: <_weakrefset.WeakSet object at 0xb6a960ac> After: <_weakrefset.WeakSet object at 0xb6c4cc0c> 1 test altered the execution environment: test_multiprocessing_spawn |
|||
| msg237382 - (view) | Author: Davin Potts (davin) * (Python committer) | Date: 2015年03月06日 21:25 | |
Corrected patch for 3.4 and default/3.5 -- newly introduced test is now turned on this time and the dangling weak references are properly addressed as well as the reference to Empty. Nastiness. Good save, Serhiy. |
|||
| msg237384 - (view) | Author: Roundup Robot (python-dev) (Python triager) | Date: 2015年03月06日 21:35 | |
New changeset cf12856bde17 by Serhiy Storchaka in branch '3.4': Issue #22853: Added regression test for using multiprocessing.Queue at import https://hg.python.org/cpython/rev/cf12856bde17 New changeset dcd6d41f2c9a by Serhiy Storchaka in branch 'default': Issue #22853: Added regression test for using multiprocessing.Queue at import https://hg.python.org/cpython/rev/dcd6d41f2c9a |
|||
| msg237385 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2015年03月06日 21:36 | |
Thank you Florian and Davin for your contribution. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:58:10 | admin | set | github: 67042 |
| 2015年03月06日 21:36:21 | serhiy.storchaka | set | status: open -> closed resolution: fixed messages: + msg237385 |
| 2015年03月06日 21:35:24 | python-dev | set | messages: + msg237384 |
| 2015年03月06日 21:25:49 | davin | set | files:
+ issue_22853_revised_only_test_import_lock_in_queue_py34_and_py35.patch messages: + msg237382 |
| 2015年03月06日 20:49:04 | serhiy.storchaka | set | messages: + msg237379 |
| 2015年03月06日 20:34:33 | python-dev | set | nosy:
+ python-dev messages: + msg237378 |
| 2015年03月06日 20:21:04 | serhiy.storchaka | set | messages: + msg237377 |
| 2015年03月06日 20:06:35 | BreamoreBoy | set | messages: + msg237376 |
| 2015年03月06日 19:59:32 | serhiy.storchaka | set | messages:
+ msg237375 components: + Library (Lib) stage: patch review -> commit review |
| 2015年03月06日 16:00:07 | serhiy.storchaka | set | assignee: serhiy.storchaka nosy: + serhiy.storchaka |
| 2015年02月28日 05:41:35 | davin | set | files: + issue_22853_only_test_import_lock_in_queue_py34_and_py35.patch |
| 2015年02月28日 05:40:50 | davin | set | files:
+ issue_22853_fix_and_test_import_lock_in_queue_py27.patch keywords: + patch messages: + msg236865 stage: patch review |
| 2015年02月27日 23:12:23 | davin | set | type: behavior messages: + msg236854 |
| 2015年02月27日 17:05:55 | BreamoreBoy | set | nosy:
+ BreamoreBoy, davin messages: + msg236790 |
| 2014年11月12日 19:55:17 | ned.deily | set | nosy:
+ sbt |
| 2014年11月12日 12:29:31 | ffinkernagel | create | |