df.to_csv()
プロセスの一部として次の行を実行する場合multiprocessing
:
filtered_chunk.to_csv(os.path.join(output_dir, "filtered_{}".format(csv_filename)), mode='a+')
次のエラーが表示されます。何が問題なのかわかりません (以下のスニペットは 1 つのmultiprocessing
プロセスのものです)。
Process ForkPoolWorker-13:
Traceback (most recent call last):
File "/home/User1/miniconda3/envs/part_ii_dev-conda/lib/python3.8/multiprocessing/process.py", line 315, in _bootstrap
File "/home/User1/miniconda3/envs/part_ii_dev-conda/lib/python3.8/multiprocessing/process.py", line 108, in run
File "/home/User1/miniconda3/envs/part_ii_dev-conda/lib/python3.8/multiprocessing/pool.py", line 109, in worker
<insert stacktrace for code I wrote...>
filtered_chunk.to_csv(os.path.join(output_dir, "filtered_{}".format(csv_filename)), mode='a+')
File "/home/User1/miniconda3/envs/part_ii_dev-conda/lib/python3.8/site-packages/pandas/core/generic.py", line 3170, in to_csv
File "/home/User1/miniconda3/envs/part_ii_dev-conda/lib/python3.8/site-packages/pandas/io/formats/csvs.py", line 185, in save
File "/home/User1/miniconda3/envs/part_ii_dev-conda/lib/python3.8/site-packages/pandas/io/common.py", line 418, in get_handle
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 971, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 914, in _find_spec
File "<frozen importlib._bootstrap_external>", line 1342, in find_spec
File "<frozen importlib._bootstrap_external>", line 1314, in _get_spec
File "<frozen importlib._bootstrap_external>", line 1443, in find_spec
File "<frozen importlib._bootstrap_external>", line 1483, in _fill_cache
OSError: [Errno 127] Key has expired: '/home/User1/miniconda3/envs/part_ii_dev-conda/lib/python3.8'
上記のスタックトレースですべてのプロセスが失敗した後、出力が得られますBus error (core dumped)
。
「キーの有効期限が切れています」と聞くと、検証が必要なものや、時間制限のあるアクセスを提供するもの (ファイル ポインタ? サーバーにアクセスするためのキー/チケット?) を思い浮かべます。私はサーバー上のセッションでスクリプトを実行したtmux
ので、サーバーへのアクセスは問題ではなかったと思います (エラー 127 のグーグル検索でマウントの問題が指摘されましたが、ここでは問題ではないと思います)。基本的にファイルハンドルを返すメソッドでスクリプトが失敗したためget_handle
、ファイルポインタが問題のようですが、理由はわかりません。
それが役立つ場合はmultiprocessing
、関数を並列化するために使用していますが、異なるプロセスが異なる csv ファイルに書き込むため、ここでは問題になりません。