私のコードのいくつかの段階で、Python辞書をjsonファイルにダンプする必要があります。なお、ここでないコードである:Python json.dumpは、サイズがゼロのファイルを生成します。
def output_batch(self, batch):
with open(os.path.join(self.get_current_job_directory(), 'batch_' + str(self.index) + '.json'), 'w') as json_file:
json.dump(batch, json_file, sort_keys = True, indent = 4, separators = (',', ': '))
exit()
ここself.index
は、この特定のインスタンスを識別する一意の整数インデックスです。 self.get_current_job_directory()
は、ファイルを作成するパスを返します。
ダンプする直前に辞書の長さを記録すると、42691
が返されます。ただし、出力ファイルのサイズは0バイトです。これは本当に意味をなさない。空のdictの場合でも、ファイルは2バイトの長さになります({}
を補うため)。
このコードは高度に並列化されたマップ・リダクション・スタイルのパイプラインの一部であり、ここではほとんど再現することはできません。このような設定では何百万もの問題が発生する可能性がありますが、dict
にアクセスできるスレッドは他になく、他のスレッドは同じ出力ファイルにアクセスしません。
***アップデート:この関数呼び出しの直後にプロセスは(exit()
を呼び出して終了します)、これと何か関係がありますか?
これがなぜ起こるのかについてのご意見やご提案はありますか?
明白かもしれませんが、実際に印刷(json_file)して、実際に正しいファイルに書き込んでいることを再確認しましたか? – kshikama
@kshikamaはい。私はそれが問題ではないことを100%確信しています。 – DarthPaghius
jsonダンプを試みる直前に、 "Hello World"やそのファイルに無作為に何かを書くことができますか? – kshikama