在并行进程之间共享信号量对象时出现问题 python

Issue while sharing semaphore objects between process in parallel python

当与并行 python 一起使用时,我在将任何信号量对象或同步对象(如事件、管道、队列等)传递给子进程时遇到问题 当我将队列传递给子进程时出现以下错误。 ' 通过继承' % type(self).__name__ RuntimeError:队列对象只能通过继承在进程之间共享

当我使用多处理库时没有发现任何问题

import pp
import time
from multiprocessing import Event, Queue, Manager, Pool

e = Queue()

def startt() :
    e.put(1)
    return 1


ppservers = ()
# Creates jobserver with automatically detected number of workers        
jobServer = pp.Server(ppservers=ppservers,proto=2)
#submit the work to the job pool or job server
job = jobServer.submit(startt,(e,),(),("time", ), globals = globals())
res = job()
print e.get()
print res

您遇到此问题是因为您在提交作业时传递了队列对象:

job = jobServer.submit(startt,(e,),(),("time", ), globals = globals())
#                              ^ here

需要注意两点:

  1. 队列已经是全局的。您不需要将其作为参数传递。

  2. 如果使用multiprocessing.Manager,您可以将队列作为参数传递:

manager = multiprocessing.Manager()
shared_queue = manager.Queue() # this shared queue can be passed as an argument

manager.Queue() 的调用实际上 return 队列的代理而不是队列本身,管理器进程将在后台处理所有必要的同步。