4
我想通过将一个信号传递给一个函数来同步对python multiprocessing.Pool
中多个工作人员的共享资源的访问。这是一些伪代码。使用python多重处理功能共享一个信号灯
def do_work(payload, semaphore):
with semaphore:
access_the_shared_resource(payload)
功能do_work
是在库中定义这样的,我不能在我的本地范围,该功能可以继承定义一个信号。我也不能通过functools.partial
传递信号量,因为multiprocessing
试图腌制不允许的信号量。什么似乎是使用multiprocessing.Manager
创建一个代理到Semaphore
工作:
manager = multiprocessing.Manager()
semaphore = manager.Semaphore()
with multiprocessing.Pool() as pool:
results = pool.map(functools.partial(do_work, semaphore=semaphore), payloads)
这是最好的办法还是我失去了明显的解决方案?