python队列可以访问等待队列的所有进程吗?

时间:2018-07-15 22:28:42

标签: python python-multiprocessing

这是一个例子:

def food(q,x):
     q.put(x)

q = mp.Queue(1)
p = []
for i in range(100): 
    p.append(mp.Process(target=foo,args=(q,100))
for i in range(len(p)):
    p[i].start()

我知道存在阻塞进程,因为队列大小仅具有1的容量,并且我没有使任何元素出队。但是,我想知道是否有任何方法可以从队列的角度找出阻塞了哪些进程。也就是说,队列能否确定/知道进程i至n正在等待将元素放入队列中?换句话说,可以以编程方式找出哪些进程正在等待将对象放入队列吗?

1 个答案:

答案 0 :(得分:0)

在工作结束后进程终止的情况下,您可以使用is_alive

import multiprocessing as mp

def foo(q,x):
     q.put(x)

q = mp.Queue(1)
p = []
for i in range(10): 
    p.append(mp.Process(target=foo,args=(q,100)))

for i in range(len(p)):
    p[i].start()

for i in range(len(p)):
    # prints true here
    print(p[i].is_alive())

for i in range(int(len(p)/2)):
    #consume half the queue data
    q.get()

for i in range(len(p)):
    # prints false for ~half here
    print(p[i].is_alive())