这只会复制我的问题,如果它试图控制共享队列上的循环,则会为主python脚本获得100%的负载
import multiprocessing
import random
def func1(num, q):
while True:
num = random.randint(1, 101)
if q.empty():
q.put(num)
def func2(num, q):
while True:
num = q.get()
num = num ** 2
if q.empty():
q.put(num)
num = 2
q = multiprocessing.Queue()
p1 = multiprocessing.Process(target=func1, args=(num, q))
p2 = multiprocessing.Process(target=func2, args=(num, q))
p1.daemon = True
p2.daemon = True
p1.start()
p2.start()
running = True
while running:
if not q.empty():
num = q.get(True, 0.1)
print(num)
是否会有更好的方法从脚本控制多个工作进程。空载更好!?
答案 0 :(得分:1)
我不确定我是否了解您的程序:
num
和func1()
的{{1}}参数是什么?它永远不会被使用。func2()
刚从队列中移出最后一个号码后,func2
将丢弃其结果。func1
构造迟早会引发func2
异常,因为它是它与if not q.empty(): q.get()
中的queue.Empty
之间的竞争。q.get()
异常将终止主进程,而使两个工作线程变成孤立的-并且正在运行。一般建议:
这是我破解的一些示例代码:
func2