マルチプロセッシングライブラリ(python 3.5)を使用しようとすると、終了しない関数に直面しています。Pythonマルチプロセッシング:インポートされた関数が終了しない
# Main.py
import multiprocessing as mp
import pandas as pd
from dosomething import dosomething
csvfolder = 'data/'
data = pd.DataFrame([
{'a':12,'b':13},
{'a':2,'b':14},
{'a':1,'b':23},
{'a':123,'b':16},
{'a':142,'b':14},
])
print('start')
result = mp.Queue()
dos = mp.Process(target=dosomething, args=(data,csvfolder,result,'dosomething'))
dos.start()
dos.join()
result.get()
print('finished')
そしてdoSomethingの中で、私は次ない関数のdoSomethingを定義している:次のように私の現在の設定がある
すべてが処理されるように見えますが(メイン)プログラムは続行されません...
# dosomething.py
import os
def dosomething(data,csvfolder,result,name):
data.to_csv(os.path.join(csvfolder,'test.csv'))
result.put({name:{'data':data}})
この関数は期待通りに実行されますが、メインプログラムが停止することはありません。
プロセスプロセス-1:トレースバック(最新の呼び出しの最後):プログラムを終了するとき、私はメッセージを以下取得、 "/usr/lib/python3.5/multiprocessing/process.pyを" ファイル、行252 _bootstrap util._exit_functionで()( _exit_function _run_finalizersで、 "/usr/lib/python3.5/multiprocessing/util.py"、ライン314ファイル)「/usr/lib/python3.5/multiprocessing/ファイルutil.py コール RES = self._callback(*セルフで、/usr/lib/python3.5/multiprocessing/util.py "ライン186」を、ライン254は、 _run_finalizersに ファイナライザ()ファイル"。 _args、** self ._kwargs)ファイル "/usr/lib/python3.5/multiprocessing/queues.py"、198行目、 _finalize_join thread.join()ファイル "/usr/lib/python3.5/threading.py"、行1054で self._wait_for_tstate_lock()_wait_for_tstate_lock ELIFのlock.acquire(ブロック、タイムアウト)に、ライン1070 "/usr/lib/python3.5/threading.pyを" ファイル参加:KeyboardInterrupt
ベース私は、result.put()が(実際のデータを使用している場合)多くの時間が応答しなくなることを知りました。私がこのキューに置いている結果は、2つの要素を持つ辞書です。そのうちの1つは、パンダのデータフレーム(数百のレコード数)です。
どうすればこの問題を解決できますか?
私はあなたのコードを実行し、それは正常に動作します。これはtest.csvを作成し、 "finished"を出力して終了します。 – Hannu
あなたのコメントに基づいて質問を編集しました。 –