这是一个例子:
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正在等待将元素放入队列中?换句话说,可以以编程方式找出哪些进程正在等待将对象放入队列吗?
答案 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())