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

Python多处理从循环获取项索引,python,multithreading,python-3.x,multiprocessing,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)): pas

我试图在几个过程中展开一个循环,并将每个迭代的索引打印为已处理的索引。我错过了什么,因为这是我所能得到的。 我试过了

 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()

问题是主流程的速度对工人不利。 主进程在处理结束之前退出。(不使用
时关闭
.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
[...]

我测试了您的第二个示例,它运行正常(除了一些缩进问题)。使用python 2.7.13在windows 10 64位上测试

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

import time
import random
from multiprocessing import Pool 

def th(ur):
    time.sleep(random.randint(1,3))
    print (ur)
    #return True

if __name__ == '__main__':
    pool = Pool(2)
    results = pool.map(th,range(10))
    pool.close()
    pool.join()

还是卡住了,什么也没来back@tagnihuguespascal对不起,我不明白问题是什么。。。是没有输出吗?是没有输出这就是问题所在。请同时调整代码的最后一行。Thanks@tagnihuguespascal哦,好的,我明白了。我得到了它。给我几分钟时间更新答案。:)@tagnihuguespascal现在检查一下谢谢。问题是,他们中没有一个人正在进行研究Windows@tagnihuguespascal对不起,我在windows上说的“而且它能工作”。。。我在Windows1064bit上用python 2.7.xx进行了测试