queue.close() "raises" BrokenPipeError



在Unix上使用python 3.7,以下代码:

import multiprocessing
queue = multiprocessing.Queue()
queue.put(1)
# time.sleep(0.01)  Adding this prevents the error
queue.close()

"raises"(在后台)一个BrokenPipeError:

Traceback (most recent call last):
File "/usr/lib/python3.7/multiprocessing/queues.py", line 242, in _feed
send_bytes(obj)
File "/usr/lib/python3.7/multiprocessing/connection.py", line 200, in send_bytes
self._send_bytes(m[offset:offset + size])
File "/usr/lib/python3.7/multiprocessing/connection.py", line 404, in _send_bytes
self._send(header + buf)
File "/usr/lib/python3.7/multiprocessing/connection.py", line 368, in _send
n = write(self._handle, buf)
BrokenPipeError: [Errno 32] Broken pipe

对我来说,这显然是一个bug,因为queue.close()queue.join_thread()只是为了避免这种bug而存在。
我错过了什么吗?

注意,BrokenPipeError只会在后台线程中引发,而后台线程是python内部用来为队列提供信息的,所以从主进程的角度来看,不会引发任何错误,并且"只";结果只是虚假的回溯打印。

(也与多处理相关。队列间歇故障。Python中的Bug ?)

这是python中的一个错误,它发生在3.7,3.8和3.9中,它在python 3.10和更高的版本中得到解决。

这是cpython github上的问题链接

最新更新