Windows上的multiprocessing.Pool.apply_async

我正在尝试使用一个来并行处理一些subprocess调用。 一切工作正常,如果我构build池的整个迭代,并使用imapmapimap_unordered等,但我不能得到apply_async工作。

例如,这可以正常工作:

 from subprocess import check_call from multiprocessing import Pool def dispatch_call(file_name): return check_call(...) if __name__ == '__main__': files = (constructed file list) pool = Pool() pool.imap(dispatch_call, files) pool.close() pool.join() 

但是,这并不是:

 from subprocess import check_call from multiprocessing import Pool def dispatch_call(file_name): return check_call(...) if __name__ == '__main__': files = (constructed file list) pool = Pool() for f in files: pool.apply_async(dispatch_call, f) pool.close() pool.join() 

我检查了multiprocessing的文档,并没有任何Windows具体问题似乎在这里相关。 我只是运气不好,试图让这个工作在Windows上?

Solutions Collecting From Web of "Windows上的multiprocessing.Pool.apply_async"

你应该把这个回调参数作为一个序列(列表/元组)来传递。

str对象也是一个序列,但传递一个字符串会导致将多个参数传递给回调(字符串的每个字符都被视为参数):

 pool.apply_async(dispatch_call, [f]) 

要么

 pool.apply_async(dispatch_call, (f,))