在并行进程之间共享信号量对象时出现问题 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
需要注意两点:
队列已经是全局的。您不需要将其作为参数传递。
如果使用multiprocessing.Manager,您可以将队列作为参数传递:
manager = multiprocessing.Manager()
shared_queue = manager.Queue() # this shared queue can be passed as an argument
对 manager.Queue()
的调用实际上 return 队列的代理而不是队列本身,管理器进程将在后台处理所有必要的同步。
当与并行 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
需要注意两点:
队列已经是全局的。您不需要将其作为参数传递。
如果使用multiprocessing.Manager,您可以将队列作为参数传递:
manager = multiprocessing.Manager()
shared_queue = manager.Queue() # this shared queue can be passed as an argument
对 manager.Queue()
的调用实际上 return 队列的代理而不是队列本身,管理器进程将在后台处理所有必要的同步。