正如您所怀疑的那样,您使用^{}是错误的,在很多方面。在map的要点是对iterable的所有元素调用函数。就像内置的^{}函数,但是是并行的。如果您想对单个呼叫排队,只需使用^{}。
对于您具体询问的问题:map采用单参数函数。如果您想要传递多个引数,您可以修改或包装您的函式以取得单一元组,而不是多个引数(我将在结尾展示这个),或只使用^{}。或者,如果您想使用apply_async,它接受一个多参数的函数,但是您传递apply_async一个参数元组,而不是单独的参数。
您需要对Pool实例调用map,而不是Pool类。您要做的类似于尝试从文件类型中read,而不是从某个打开的文件中读取。在
您尝试在每次迭代之后关闭并加入Pool。你不想在完成所有这些任务之前这样做,否则你的代码只会等待第一个完成,然后为第二个代码引发一个异常。在
因此,最小的改变是:if __name__ == '__main__':
pool = Pool()
for foo in range(3):
for bar in range(5):
for baz in range(4):
for foobar in range(10):
pool.apply_async(calculation, (foo, bar, foobar, baz))
pool.close()
pool.join()
请注意,我将所有内容都保存在if __name__ == '__main__':块中,包括新的Pool()构造函数。我不会在后面的示例中展示这一点,