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: A bug in the multiprocessing module
Type: behavior Stage: resolved
Components: Extension Modules Versions: Python 3.9
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: davin, eshkrig, iritkatriel, pitrou
Priority: normal Keywords:

Created on 2019-09-17 06:51 by eshkrig, last changed 2022-04-11 14:59 by admin.

Files
File name Uploaded Description Edit
testqueue.py eshkrig, 2019-09-17 06:51 Example of a freezing program
Messages (3)
msg352613 - (view) Author: eshkrig (eshkrig) Date: 2019-09-17 06:51
Hi!

I found a bug in the multiprocessing module.

The documentation (https://docs.python.org/3.6/library/multiprocessing.html) for the Queue.get method says:
"If timeout is a positive number, it blocks at most timeout seconds ..."

But the Queue.get method freezes if the process filling the queue terminates while reading data.

In the attachment is an example of a program (testqueue.py) that freezes after ~ 5-30 seconds.
After pressing <control>-<c>, the output is as follows:
Traceback (most recent call last):
  File "./testqueue.py", line 45, in <module>
    result = ps_queues[cpu].get(timeout=2)
  File "/usr/lib64/python3.6/multiprocessing/queues.py", line 108, in get
    res = self._recv_bytes()
  File "/usr/lib64/python3.6/multiprocessing/connection.py", line 216, in recv_bytes
    buf = self._recv_bytes(maxlength)
  File "/usr/lib64/python3.6/multiprocessing/connection.py", line 411, in _recv_bytes
    return self._recv(size)
  File "/usr/lib64/python3.6/multiprocessing/connection.py", line 379, in _recv
    chunk = read(handle, remaining)
KeyboardInterrupt

Please fix it.
msg411500 - (view) Author: Irit Katriel (iritkatriel) * (Python committer) Date: 2022-01-24 18:16
Python 3.6 is no longer maintained and this doesn't freeze on my Mac on 3.11. 

Please create a new issue if you are seeing the freeze on a current python version (>= 3.9) and specify which system you are running it on.
msg411645 - (view) Author: eshkrig (eshkrig) Date: 2022-01-25 17:48
$ cat /etc/os-release
NAME=Gentoo
ID=gentoo
PRETTY_NAME="Gentoo/Linux"
ANSI_COLOR="1;32"
HOME_URL="https://www.gentoo.org/"
SUPPORT_URL="https://www.gentoo.org/support/"
BUG_REPORT_URL="https://bugs.gentoo.org/"

$ uname -a
Linux lynx 5.16.2-gentoo-1 #1 SMP PREEMPT Fri Jan 21 10:38:04 MSK 2022 x86_64 AMD FX(tm)-8350 Eight-Core Processor AuthenticAMD GNU/Linux

$ python --version
Python 3.9.9

$ ./testqueue.py
queue.get() from pid 11371
queue.get() from pid 11372
^CTraceback (most recent call last):
  File "/home/john/main/123/./testqueue.py", line 45, in <module>
    result = ps_queues[cpu].get(timeout=2)
  File "/usr/lib/python3.9/multiprocessing/queues.py", line 117, in get
    res = self._recv_bytes()
  File "/usr/lib/python3.9/multiprocessing/connection.py", line 221, in recv_bytes
    buf = self._recv_bytes(maxlength)
  File "/usr/lib/python3.9/multiprocessing/connection.py", line 426, in _recv_bytes
    return self._recv(size)
  File "/usr/lib/python3.9/multiprocessing/connection.py", line 384, in _recv
    chunk = read(handle, remaining)
KeyboardInterrupt
History
Date User Action Args
2022-04-11 14:59:20adminsetgithub: 82376
2022-01-25 17:48:43eshkrigsetstatus: closed -> open
resolution: out of date ->
messages: + msg411645

versions: + Python 3.9, - Python 3.6
2022-01-24 18:16:50iritkatrielsetstatus: open -> closed

nosy: + iritkatriel
messages: + msg411500

resolution: out of date
stage: resolved
2019-09-21 01:00:25terry.reedysetnosy: + pitrou, davin
2019-09-17 06:51:09eshkrigcreate