gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 00:40:21 25 4
gpt4 key购买 nike

我有一个 Driver 类,它有一个实例方法 write。我正在尝试使用 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

我怎样才能做到这一点?

最佳答案

简单的答案是你不能,如果你有共享状态,该对象将无法picklable,并且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

希望这有帮助。

关于python - 在Python中的实例方法上调用多处理池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57400486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com