1

子プロセスにキューを渡したときに次のエラーが発生しています。'継承による' % 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
4

1 に答える 1

2

ジョブを送信するときにキュー オブジェクトを渡しているため、この問題が発生しています。

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

2 つの注意事項:

  1. キューはすでにグローバルです。引数として渡す必要はありません。

  2. multiprocessing.Managerを使用する場合は、キューを引数として渡すことができます。

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

を呼び出すと、manager.Queue()実際にはキュー自体ではなくプロキシがキューに返され、マネージャー プロセスが必要なすべての同期をバックグラウンドで処理します。

于 2015-06-16T16:19:41.367 に答える