Python 如何将函数的返回值追加到池中的列表中?
我很好奇是否可以将函数f(x,y)的返回值附加到列表中 所以我有这个: 并行:Python 如何将函数的返回值追加到池中的列表中?,python,multithreading,python-multithreading,pool,Python,Multithreading,Python Multithreading,Pool,我很好奇是否可以将函数f(x,y)的返回值附加到列表中 所以我有这个: 并行: def download_unit_LVs(self, cislo_uzemia): pool = Pool(number_of_workers) for cislo in cisla: pool.apply_async(self.download_cislo, args=(cislo_uzemia,cislo)) pool.close() pool.joi
def download_unit_LVs(self, cislo_uzemia):
pool = Pool(number_of_workers)
for cislo in cisla:
pool.apply_async(self.download_cislo, args=(cislo_uzemia,cislo))
pool.close()
pool.join()
self.manager.commit()
这就是我并行运行方法self.download_cislo
的方式,但问题是,它返回一个我必须附加到结果列表中的值
怎么做
连续的:
def download_unit_LVs(self, cislo_uzemia):
results = []
for cislo in cisla:
results.append(self.download_cislo(cislo_uzemia,cislo))
self.manager.commit()
pool.apply\u async
调用可以传递一个。这个
回调函数将在foo
函数完成时调用,并将
已传递由foo
返回的值。注意返回值,因为进程之间的通信是通过队列完成的
import multiprocessing as mp
def foo(x):
return x * x
if __name__ == '__main__':
result = []
pool = mp.Pool()
for i in range(100):
pool.apply_async(foo, args=(i, ), callback=result.append)
pool.close()
pool.join()
print(result)
# [0, 1, 4, 9, 16, ... 9409, 9604, 9801]
如果结果应该出现在列表中,请使用
池的map()
方法:
def download_unit_LVs(self, cislo_uzemia):
pool = Pool(number_of_workers)
results = pool.map(partial(self.download_cislo, cislo_uzemia), self.cisla)
self.manager.commit()
partial()。在本例中,回调和循环也是不必要的,因为它们可以被Pool.map()
替换,后者已经返回一个包含所有结果的列表。我刚刚用map
和apply\u async
测试了这两个选项,并且apply\u async
更快,谢谢!在您的示例中,列表遵循for
循环的正确顺序。但是当我把它应用到我的实际案例中时,列表中有一半的元素顺序错误。如何确保它们以正确的顺序追加?