2016-01-21 91 views
0

我需要一些帮助来解决这个问题。反复产卵的过程相同

我遇到的问题是,进程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
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(),这样分析每次可以处理多个数据。然后,您可以实例化尽可能多的分析,而不管其数据是多少。