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进行了测试