2016-01-24 64 views
1

假设我们有一些使用pool.apply_async()产生的进程。当其中一个返回值时,如何停止所有其他进程? 此外,这是获得算法运行时间的正确方法吗? 这里的示例代码: -在完成之前停止使用pool.apply_async()产生的进程

import timeit 
import multiprocessing as mp 

data = range(1,200000) 

def func(search): 
    for val in data: 
     if val >= search: 
      # Doing something such that other processes stop ???? 
      return val*val 

if __name__ == "__main__": 
    cpu_count = mp.cpu_count() 
    pool = mp.Pool(processes = cpu_count) 

    output = [] 

    start = timeit.default_timer() 

    results = [] 
    while cpu_count >= 1: 
     results.append(pool.apply_async(func, (150000,))) 
     cpu_count = cpu_count - 1 

    output = [p.get() for p in results] 
    stop = timeit.default_timer() 
    print output 

    pool.close() 
    pool.join() 

    print "Running Time : " + str(stop - start) + " seconds" 

回答

0

我从来没有这样做,而是Python文档似乎给有关如何应该是这样的一个想法。

参见:https://docs.python.org/2/library/multiprocessing.html#multiprocessing.Process.terminate

在你的代码片段,我会做到这一点:

while cpu_count >= 1: 
     if len(results)>0: 
      pool.terminate() 
      pool.close() 
      break 
     results.append(pool.apply_async(func, (150000,))) 
     cpu_count = cpu_count - 1 

而且你的时间方法似乎不错。我会在开始和停止时使用time.time(),然后显示减法,因为我已经习惯了。

相关问题