New submission from Radosław Szkodziński:

multiprocessing.Queue.empty() uses pipe polling on Windows. Unfortunately, pipe 
semantics on windows are different from POSIX.

The result is either:
- Hang when one process tries to get() and another checks for empty()
- Falsely returning empty() == False despite nothing being possible to get - 
because the other process is actually trying to read from the queue.

The attached testcase demonstrates the first case, with main process hard 
hanging on my Python 2.7.8 (anaconda), 32-bit on Windows 7 64-bit. Whether 1 or 
2 happens depends on specific program flow.
Both can cause deadlocks in code that should be valid.

Note that get(block=False) actually works correctly.

It is possible that the problem is also present in Python 3.

----------
components: Library (Lib), Windows
files: testmp.py
messages: 231984
nosy: Radosław.Szkodziński, steve.dower, tim.golden, zach.ware
priority: normal
severity: normal
status: open
title: multiprocessing Queue empty() is broken on Windows
versions: Python 2.7
Added file: http://bugs.python.org/file37342/testmp.py

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue22976>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to