在 Python 中的实例方法上调用多处理池



我有一个驱动程序类,它有一个实例方法写入。我正在尝试使用 Python 多处理将此实例方法应用于队列中的对象。 这是我的代码。

类驱动程序:

def __init__(self, arg1, arg2, arg3):
#initialize
def write(self, key):
# do something

这是我在集合上如何称呼它。

def write_to_db(key, d=Driver(arg1=None, arg2=None, arg3=None)):
d.write(key)
def main():
.........
with multiprocessing.Pool(processes=8) as pool:
driver = Driver(arg1=arg1, arg2=arg2, arg3=arg3)
_ = pool.map(write_to_db, (arr, driver))

我收到以下错误:

TypeError: can't pickle _thread.RLock objects

我怎样才能做到这一点?

简单的答案是你不能,如果你有共享状态,对象将不可选择,python将抛出错误。 长答案是,为此,您必须在池中的进程中实例化对象。

您可以通过这种方式实例化池,

with mp.Pool(processes=processes, initializer=_worker_init, initargs=(config,)) as pool:
results = pool.map(_worker_apply, resources)

如果要传递配置,则config通过resources是各个流程将在其上工作的集合。

def _worker_init(config):
# initialize the object here

def _worker_apply(payload):
process = mp.current_process()
return process.simulator.apply(payload)# implement the apply function to manage state of the object

希望这有帮助。

相关内容

  • 没有找到相关文章

最新更新