用于并行调用非pickleable第三方方法的python解决方案?

时间:2015-09-07 18:11:57

标签: python multithreading parallel-processing multiprocessing

这是一个有点普遍的问题,没有特定的代码示例。我试图从第三方库并行调用方法的调用。使用multiprocessing.Pool将是我想要的,但它失败了,因为该方法不是可以腌制的。使用扭曲的东西会有点过分。

单个呼叫是独立的,程序可以阻止等待整个呼叫完成。我确实需要将一些参数传递给并行调用,这可以通过一系列dicts来完成。所以我需要达到相当于

p = multiprocessing.Pool(count)
p.map(my_wrapper_around_some_3rd_party_method, my_list_of_dicts)

当第三方方法不适合时。

我应该看一下明显的python习语或模式吗?

2 个答案:

答案 0 :(得分:0)

也许这会有所帮助: https://khinsen.wordpress.com/2012/02/06/teaching-parallel-computing-in-python/

在他的情况下,numpy.sqrt()是不可挑选的,他在一个本地函数中调用它,并给出了map。

答案 1 :(得分:0)

你可以使用multiprocess,它是multiprocessing的一个能够腌制大多数python对象的分支。

>>> import multiprocess as mp
>>> 
>>> pool = mp.Pool()
>>> import numpy as np
>>> pool.map(np.sqrt, range(4)) 
[0.0, 1.0, 1.4142135623730951, 1.7320508075688772]
>>> pool.map(lambda x: x**2, range(4))
[0, 1, 4, 9]

我是作者,您可以在此处获取:https://github.com/uqfoundation或使用pip install