Python多处理从循环中获取项索引

时间:2017-05-04 08:23:57

标签: python multithreading python-3.x multiprocessing

我试图在几个进程上传播一个循环并打印每个迭代的索引作为其处理。我得到的是什么,因为这是我得到的。 我试过了

 import multiprocessing
 import os

 def f(key_value):
     print (key_value)
 if __name__ == '__main__':
     pool = multiprocessing.Pool(2)
     for _ in pool.imap(f, range(100)):
      pass

以及

   from multiprocessing import Pool 
   def th(ur):
      print (ur)
   if __name__ == '__main__':
     pool = Pool(2)
     results = pool.map(th,range(100))
     pool.close()
     pool.join()

2 个答案:

答案 0 :(得分:1)

问题是主要过程对工人的速度。 主进程在处理结束前退出。 (不使用.close .join时)

此外,在tasklet函数中错过了返回值

以下代码按预期工作:

import multiprocessing

def f(tuple_value):
    index, value = tuple_value
    print("Index: {} Value: {}".format(index, value))
    return True

if __name__ == '__main__':
    pool = multiprocessing.Pool(2)
    pool.imap(f, enumerate(range(100)))
    pool.close()
    pool.join()

Python 3.x和2.7中的输出:

$ python3 test.py 
Index: 0 Value: 0
Index: 1 Value: 1
Index: 2 Value: 2
Index: 3 Value: 3
[...]

答案 1 :(得分:0)

我测试了你的第二个例子并且它有效(除了一些缩进问题)。在Windows 10 64bit上使用python 2.7.13进行测试

我还添加了一些随机等待时间,以验证异步打印。

{{1}}