제 코드의 일부 단계에서 파이썬 사전을 json 파일로 덤프해야합니다.파이썬 json.dump는 크기가 0 바이트 인 파일을 생성합니다.
다음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 바이트 길이가됩니다 ({}
을 보완하기 위해).
이 코드는 고도로 병렬화 된 map-reduce 스타일 파이프 라인의 일부이며 여기에서 재현하는 것이 거의 불가능합니다. 그런 설정에서 잘못 될 수있는 일은 백만 가지가되었지만 다른 스레드는 dict
에 액세스 할 수 없으며 다른 스레드는 동일한 출력 파일에 액세스하지 않습니다.
*** 업데이트 :이 함수 호출 바로 다음에 (exit()
을 호출하여) 프로세스가 종료됩니다. 아마도이 작업과 관련이 있습니까?
왜 이런 일이 발생할 수있는 제안이나 아이디어가 있습니까?
명백한 내용 일지 모르지만 인쇄 (json_file)하고 올바른 파일에 실제로 쓰고 있는지 확인하십시오. – kshikama
@kshikama 예. 나는 이것이 문제가 아니라는 것을 100 % 확신한다. – DarthPaghius
json 덤프를 시도하기 직전에 "Hello World"또는 그 파일에 임의로 쓸 수 있습니까? – kshikama