反复产生同样的过程

时间:2016-01-21 12:58:20

标签: python multiprocessing

我需要一些帮助来解决这个问题。

我遇到的问题是进程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()

1 个答案:

答案 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()时进行分析循环,以便分析可以在每次调用时处理多个数据。然后,无论有多少数据,您都可以实例化您认为最佳的分析。