Python 如何将函数的返回值追加到池中的列表中?

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

我很好奇是否可以将函数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.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
循环的正确顺序。但是当我把它应用到我的实际案例中时,列表中有一半的元素顺序错误。如何确保它们以正确的顺序追加?