Python多处理程序没有运行到最后

时间:2014-02-13 08:46:19

标签: python python-2.7 parallel-processing multiprocessing python-multithreading

我是python中多处理的新手。

基本上我的问题场景是我想在一组表上并行地运行我的python脚本说2个表。

这里我的python脚本并行地从每个表中读取数据,然后将每个表中的数据写入另一个表。

我编写了以下代码片段来创建多进程python脚本。但是,当我运行脚本时,它不会完成,也不会抛出任何错误消息。

count = multiprocessing.cpu_count()
pool = multiprocessing.Pool(processes=count)
args = [ ('yelp','localhost:9160','cassa1','flight88'), ('yelp','localhost:9160','cassa1','flight96') ]
for a in args:
    print a
    pool.apply_async(user_input,a)

对此感到欣慰,因为我感到很困惑并且困在这里。

1 个答案:

答案 0 :(得分:1)

您的脚本在子进程完成其任务之前退出。最后添加:

pool.close() # no more tasks
pool.join()  # wait for the remaining tasks to complete

此外,您可以使用pool.imap*()方法:

from multiprocessing import Pool

def safe_user_input(args):
    try:
         return user_input(*args), None
    except Exception as e:
         return None, str(e)

if __name__=="__main__":       
   tables = [
        ('yelp','localhost:9160','cassa1','flight88'),
        ('yelp','localhost:9160','cassa1','flight96')
   ]

   pool = Pool() # use all available CPUs
   for result, error in pool.imap_unordered(safe_user_input, tables):
       if error is None: # no error
          print(result)