前提・実現したいこと
pythonで並列処理をしていて、mainの方で取得したデータを一時的にキューに入れたいと思っています。
subプロセスではそのキューデータをもとに別の処理を並列でしたいのですが、
どうやらgrobal上でputしたものはsub_process関数でも受け取れるのですが、main関数でputしたものは入らないみたいです。
おそらく使用しているメモリが変わってくるのかなと思っているのですが、
どのようにすればmain関数でputしたデータをsub_processで扱えるでしょうか。
わかる方がいましたら、コメントお願いします。
発生している問題・エラーメッセージ
キューのサイズ: 1 main queue size: 5
該当のソースコード
python
1from queue import Queue 2 3def sub_process(): 4 while not q.empty(): 5 print(f'キューのサイズ:{q.qsize()}') 6 7 8 9def main(): 10 try: 11 while True: 12 print('main process...') 13 q.put({'sample': 1}) 14 print(f'main queue size: {q.qsize()}') 15 16 except KeyboardInterrupt: 17 print('終了します.') 18 19 20if __name__ == '__main__': 21 q=Queue() 22 q.put('hoge') 23 with concurrent.futures.ProcessPoolExecutor() as executor: 24 futures_1=executor.submit(sub_process) 25 futures_2=executor.submit(main) 26 futures_1.result() 27 futures_2.result()
試したこと
マルチプロセスの場合はキューを引数として渡すことはできません。
引数として渡せるのはpickle化できるオブジェクトのみに限られます。
回答1件
あなたの回答
tips
プレビュー