重复产生相同的进程
Repeatedly spawning the same process
我需要一些帮助来解决这个问题。
我 运行 遇到的问题是进程 1 运行 内部有一个 for 循环,收集数据后我需要生成一个进程来分析它。
我的这段代码只会创建每个进程一次,如何为每个 data() 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()
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()
时进行分析循环,以便分析每次调用可以处理多个数据。然后,无论有多少数据,您都可以实例化您认为最佳的尽可能多的分析。
我需要一些帮助来解决这个问题。
我 运行 遇到的问题是进程 1 运行 内部有一个 for 循环,收集数据后我需要生成一个进程来分析它。
我的这段代码只会创建每个进程一次,如何为每个 data() 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()
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()
时进行分析循环,以便分析每次调用可以处理多个数据。然后,无论有多少数据,您都可以实例化您认为最佳的尽可能多的分析。