我需要一些帮助来解决这个问题。
我遇到的问题是进程1在内部运行for循环,数据被收集,之后我需要生成一个进程来分析它。
这个代码我只会创建一次每个进程,如何为每个数据()循环重复进程2? TIA
from multiprocessing import Process, Queue
def data(q):
dosmth()
for i in range(5):
fetch_data()
q.put('data has been added')
def analysis(q):
msg = q.get()
print(msg)
process_data()
if __name__ == '__main__':
q = Queue()
processes = [Process(target=data, args=(q,)), Process(target=analysis, args=(q,))]
for p in processes:
p.start()
for p in processes:
p.join()
答案 0 :(得分:1)
from multiprocessing import Process, Queue
def data(q):
dosmth()
processes = []
for i in range(5):
fetch_data()
q.put('data has been added')
processes.append(Process(target=analysis, args=(q,)))
for p in processes:
p.start()
for p in processes:
p.join()
def analysis(q):
msg = q.get()
print(msg)
process_data()
if __name__ == '__main__':
q = Queue()
processes = [Process(target=data, args=(q,))]
for p in processes:
p.start()
for p in processes:
p.join()
甚至更好地直接传递数据,而不是队列进行分析。不好的一面是,如果你获得大量数据,你将开始大量的过程,效率低下。
另一种方法是在q.get()
时进行分析循环,以便分析可以在每次调用时处理多个数据。然后,无论有多少数据,您都可以实例化您认为最佳的分析。