仍然是Python的初学者。不知道为什么当我期望一个包含5个2的数组时会输出一个空数组
from multiprocessing import Pool
results = []
def func(a=1):
if a == 1:
return 1
return 2
def collect_results(result):
results.append(result)
if __name__=="__main__":
poolObjects = []
pool = Pool(processes=2)
poolObjects = [pool.apply_async(func, args=(2), callback=collect_results) for i in range(5)]
pool.close()
pool.join()
print results
但是当我把poolObjects行改成
^{pr2}$它可以打印出5个1的数组。我做错什么了?在
问题在于如何传递参数:
args
必须是元组(或序列)。所以改变到
^{pr2}$后面的逗号创建一个长度为1的元组,包含整数2。在
然后你的程序就会打印出来
为什么你没有得到一个错误?你做了;—)-但它被抑制了。错误不会发生在主程序中,而是发生在安排跨进程边界发送工作的后台机器中。根本没有好的方法来报告这样的错误,所以它们被抑制了。在
在
apply_async
的情况下,错误被保存起来,等待您将.get()
应用到结果对象。在例如,在原始程序的末尾添加以下循环:
然后报告抑制的误差,如下所示:
相关问题 更多 >
编程相关推荐