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.

classification
Title: Process hangs when calling urllib.request in a multiprocessing.Process with import of sounddevice package
Type: crash Stage: resolved
Components: ctypes, Interpreter Core, Library (Lib) Versions: Python 3.7
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: Nosy List: fakufaku, gvanrossum, ned.deily
Priority: normal Keywords:

Created on 2021-01-07 06:13 by fakufaku, last changed 2022-04-11 14:59 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
test_mp_req.py fakufaku, 2021-01-07 06:13 Minimal example to reproduce the problem
Messages (7)
msg384562 - (view) Author: Robin Scheibler (fakufaku) Date: 2021-01-07 06:13
I am having an issue with using urllib in a multiprocessing.Process when the package sounddevice (https://github.com/spatialaudio/python-sounddevice) has been already imported.

The sub-process hangs upon calling urllib.request.urlopen (and methods from the requests package too).

1. If the package sounddevice is not imported, things work as expected.
2. If the package sounddevice is imported, but urllib.request.urlopen is called once prior to launching thee sub-process, then things also work as expected.

I have attached a file containing code to reproduce the issue.

I have run this example file in:
- Python 3.7.9 (conda distribution)
- Mac OS X 10.15.7

# Running the code as is reproduces the problem
> python ./test_mp_req.py
Nothing in the queue. Leave.
wait for process to terminate...
finished

# Running the code with either line 8 commented *or* line 32 uncommented
# gives the expected output
> python ./test_mp_req.py
Received https://api.github.com. Send GET request... done.
Received https://www.google.com. Send GET request... done.
https://api.github.com: ok
https://www.google.com: ok
Nothing in the queue. Leave.
wait for process to terminate...
finished
msg384606 - (view) Author: Guido van Rossum (gvanrossum) * (Python committer) Date: 2021-01-07 21:27
I would assume it’s some interaction between threads and fork. Have you asked the authors of sound device about this?
msg384629 - (view) Author: Robin Scheibler (fakufaku) Date: 2021-01-08 02:38
Thank you very much for the reply! I was indeed hesitating where to post the issue. I have now cross-posted in the sounddevice issue tracker.

https://github.com/spatialaudio/python-sounddevice/issues/302

I'll update the issue if things progress on that side.

The sounddevice is essentially a wrapper around the portaudio library, similar to pyaudio. I have tried the test code with an import of pyaudio rather than sounddevice, but the issue does not happen in that case.
msg384681 - (view) Author: Ned Deily (ned.deily) * (Python committer) Date: 2021-01-08 17:25
Also note that there are known problems with using the "fork" start method of multiprocessing on macOS. As of Python 3.8, the default start methord on macOS is now "spawn":

https://docs.python.org/3.9/library/multiprocessing.html#contexts-and-start-methods

Try using "spawn" and/or upgrade to a more recent version of Python 3 (3.9.1 is current).
msg384714 - (view) Author: Robin Scheibler (fakufaku) Date: 2021-01-09 05:50
Thanks for the suggestion. I had indeed run into some issues with fork vs spawn before.

I have tested with 3.8.5 and 3.9.1 and the bug doesn't occur with these more recent versions.

Should I leave the bug open since 3.7 is still supported ?
msg384734 - (view) Author: Guido van Rossum (gvanrossum) * (Python committer) Date: 2021-01-09 17:04
No, let's leave 3.7 alone -- it's in security-fixes-only mode.
msg384747 - (view) Author: Robin Scheibler (fakufaku) Date: 2021-01-10 01:13
Thank you very much for your help!
History
Date User Action Args
2022-04-11 14:59:39adminsetgithub: 87016
2021-01-10 01:13:33fakufakusetmessages: + msg384747
2021-01-09 17:04:35gvanrossumsetstatus: open -> closed
resolution: fixed
messages: + msg384734

stage: resolved
2021-01-09 05:50:57fakufakusetmessages: + msg384714
2021-01-08 17:25:29ned.deilysetnosy: + ned.deily
messages: + msg384681
2021-01-08 02:38:31fakufakusetmessages: + msg384629
2021-01-07 21:27:18gvanrossumsetnosy: + gvanrossum
messages: + msg384606
2021-01-07 06:13:56fakufakucreate