Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork33.3k
gh-88110: clear concurrent.futures.thread._threads_queues after fork to avoid joining parent process' threads#126098
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Uh oh!
There was an error while loading.Please reload this page.
Conversation
… forkThreads are gone after fork, so clear the queues too. Otherwise thechild process (here created via multiprocessing.Process) crashes oninterpreter exit with: Traceback (most recent call last): File "/usr/lib64/python3.11/multiprocessing/popen_fork.py", line 72, in _launch code = process_obj._bootstrap(parent_sentinel=child_r) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib64/python3.11/multiprocessing/process.py", line 332, in _bootstrap threading._shutdown() File "/usr/lib64/python3.11/threading.py", line 1561, in _shutdown atexit_call() File "/usr/lib64/python3.11/concurrent/futures/thread.py", line 31, in _python_exit t.join() File "/usr/lib64/python3.11/threading.py", line 1109, in join raise RuntimeError("cannot join current thread") RuntimeError: cannot join current threadFixespython#88110ghost commentedOct 29, 2024 • edited by ghost
Loading Uh oh!
There was an error while loading.Please reload this page.
edited by ghost
Uh oh!
There was an error while loading.Please reload this page.
Misc/NEWS.d/next/Library/2023-02-15-23-54-42.gh-issue-88110.KU6erv.rst OutdatedShow resolvedHide resolved
Uh oh!
There was an error while loading.Please reload this page.
Co-authored-by: RUANG (James Roy) <longjinyii@outlook.com>
Drino commentedNov 2, 2024 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
Friendly ping for this review,@rruuaanng Hopefully this one line of code can make it to main :) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Please silence the deprecation warning:
test_process_fork_from_a_threadpool (test.test_concurrent_futures.test_thread_pool.ThreadPoolExecutorTest.test_process_fork_from_a_threadpool) ... /home/serhiy/py/cpython-tmp/Lib/multiprocessing/popen_fork.py:67: DeprecationWarning: This process (pid=1243139) is multi-threaded, use of fork() may lead to deadlocks in the child. self.pid = os.fork()0.00s okUh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
The test is failing.
Colonel Mustard did it in the Library with the Lead Pipe.
bedevere-bot commentedNov 20, 2024
1848ce6 intopython:mainUh oh!
There was an error while loading.Please reload this page.
Thanks@Drino for the PR, and@serhiy-storchaka for merging it 🌮🎉.. I'm working now to backport this PR to: 3.12, 3.13. |
… fork to avoid joining parent process' threads (pythonGH-126098)Threads are gone after fork, so clear the queues too. Otherwise thechild process (here created via multiprocessing.Process) crashes oninterpreter exit.(cherry picked from commit1848ce6)Co-authored-by: Andrei Bodrov <Drino@users.noreply.github.com>Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
GH-127163 is a backport of this pull request to the3.13 branch. |
… fork to avoid joining parent process' threads (pythonGH-126098)Threads are gone after fork, so clear the queues too. Otherwise thechild process (here created via multiprocessing.Process) crashes oninterpreter exit.(cherry picked from commit1848ce6)Co-authored-by: Andrei Bodrov <Drino@users.noreply.github.com>Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
GH-127164 is a backport of this pull request to the3.12 branch. |
…r fork to avoid joining parent process' threads (GH-126098) (GH-127163)Threads are gone after fork, so clear the queues too. Otherwise thechild process (here created via multiprocessing.Process) crashes oninterpreter exit.(cherry picked from commit1848ce6)Co-authored-by: Andrei Bodrov <Drino@users.noreply.github.com>Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
…r fork to avoid joining parent process' threads (GH-126098) (GH-127164)Threads are gone after fork, so clear the queues too. Otherwise thechild process (here created via multiprocessing.Process) crashes oninterpreter exit.(cherry picked from commit1848ce6)Co-authored-by: Andrei Bodrov <Drino@users.noreply.github.com>Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
… fork to avoid joining parent process' threads (pythonGH-126098)Threads are gone after fork, so clear the queues too. Otherwise thechild process (here created via multiprocessing.Process) crashes oninterpreter exit.Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Uh oh!
There was an error while loading.Please reload this page.
I've added a test to marmarek@ PR:#101940
_threads_queuesare copied as-is into the fork memory, but there are no threads in the child process, so child process crashes when callingt.join()in_python_exit.I'm facing this issue for the second time during last two years, so I hope it can be fixed :)