New submission from Max:

Using multiprocessing.Queue() with several processes writing very fast results 
in a deadlock both on Windows and UNIX.

For example, this code:

from multiprocessing import Process, Queue, Manager
import time, sys

def simulate(q, n_results):
    for i in range(n_results):
        time.sleep(0.01)
        q.put(i)

def main():
    n_workers = int(sys.argv[1])
    n_results = int(sys.argv[2])

    q = Queue()
    proc_list = [Process(target=simulate, 
        args=(q, n_results),
        daemon=True) for i in range(n_workers)]

    for proc in proc_list:
        proc.start()

    for i in range(5):
        time.sleep(1)
        print('current approximate queue size:', q.qsize())
        alive = [p.pid for p in proc_list if p.is_alive()]
        if alive:
            print(len(alive), 'processes alive; among them:', alive[:5])
        else:
            break

    for p in proc_list:
        p.join()

    print('final appr queue size', q.qsize())


if __name__ == '__main__':
    main()


hangs on Windows 10 (python 3.6) with 2 workers and 1000 results each, and on 
Ubuntu 16.04 (python 3.5) with 100 workers and 100 results each. The print out 
shows that the queue has reached the full size, but a bunch of processes are 
still alive. Presumably, they somehow manage to lock themselves out even though 
they don't depend on each other (must be in the implementation of Queue()):

current approximate queue size: 9984
47 processes alive; among them: [2238, 2241, 2242, 2244, 2247]
current approximate queue size: 10000
47 processes alive; among them: [2238, 2241, 2242, 2244, 2247]

The deadlock disappears once multiprocessing.Queue() is replaced with 
multiprocessing.Manager().Queue() - or at least I wasn't able to replicate it 
with a reasonable number of processes and results.

----------
components: Library (Lib)
messages: 289479
nosy: max
priority: normal
severity: normal
status: open
title: Deadlock with multiprocessing.Queue()
type: behavior
versions: Python 3.5, Python 3.6

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

Reply via email to