これが私のコードです。この他の質問がやろうとしていることと非常によく似たものを行うことになっています。特に、この図は関連しています: f1 = 生産、f2 = f3 = 労働者、f4 = 消費者。
私はまだすべてをうまく終わらせるという問題に取り組もうとはしていません。それはこの質問の目的ではありません。「RuntimeError: Queue objects should be shared only between processes through inheritance」というエラーが表示されます。これを修正する方法がわかりません。Go のチャネルのような関数にキューを渡したいだけです。これがコードです。
import multiprocessing
def produce(n, queue):
for i in xrange(n):
queue.put(i)
def worker(in_queue, out_queue):
for i in iter( in_queue.get, None):
out_queue.put(i*i)
def consumer(queue):
ans = []
for i in iter( queue.get, None):
ans.append(i)
return ans
def main(n):
pool = multiprocessing.Pool(4)
in_queue = multiprocessing.Queue()
out_queue = multiprocessing.Queue()
pool.apply_async(produce, (n, in_queue))
for i in range(2):
pool.apply_async(worker, (in_queue, out_queue))
result = consumer(out_queue)
pool.close()
pool.join()
return result
main(200)
どうすれば修正できますか?
それを行う簡単な方法はありますか?
試してみPool.map
ましたが、これを機能させたいと思います。