내 처리 프로세스와 내 데몬 프로세스간에 통신하는 데 Multiprocessing.Queue를 사용하고 있습니다. 데몬은 대기열에서 출력을 가져 와서 무한 루프의 파일에 씁니다. 파일 객체는 데몬 프로세스 printToFile 자체에서 열립니다.python 데몬 프로세스가 파일에 쓰지 않습니다.
resultqueue = Queue()
p = Process(target = printToFile , args=(resultqueue))
p.daemon = True
p.start()
for si, ei in ranges:
pr = Process(target = processing , args=(si, ei, resultqueue))
pr.start()
processes.append(pr)
for pr in processes:
pr.join()
내 문제는 PrintToFile이, 그것은 화면에 출력에도 불구하고,이 큐에서 얻는 출력을 파일에 아무것도 기록하지 않는다는 것입니다. 내가 줄을 제거하고, 데몬 프로세스로 설정하고, Ctrl + C를 사용하여 수동으로 프로그램을 종료하면 모든 것이 잘 동작합니다. 누군가가 내가 무슨 일이 일어나고 있는지 이해할 수있게 도와 줄 수 있습니까? 디버깅을 시작할 위치를 모르겠습니다.
프로그램이 실행을 끝내면 데몬이 종료되므로 fileObject.close()를 사용하지 않습니다. 하지만 프로세스 데몬을 만들지 않고 Ctrl + C를 사용하면 프로그램이 파일에 쓰기 때문에 문제는 아니라고 생각합니다. 또 다른 (아마도 관련이없는) 문제는 파일 객체가 printToFile 내에서 인스턴스화되지 않았지만 전역 인 경우에도 Ctrl + C를 사용하여 출력을 파일로 인쇄하지 않는다는 것입니다. 그러나 나는 그걸로 살 수있다. 그러나 나는 아직도 무슨 일이 일어나고 있는지 알고 싶다.
'open' 함수의 세 번째 매개 변수로 '0'을 사용하여 파일 열기를 시도하십시오. – Deck
실행 가능한 완전한 예제를 제공 할 수 있습니까? 지침은 [SSCCE] (http://sscce.org)를 참조하십시오. 마치 우리가 코드를 보여주지 않은 함수 안에 코드를 디버깅 해달라고 요청한 것처럼 보입니다. – abarnert
덕분에 @Deck, 그게 내가 그것에 대해 몰랐다는 것을 믿을 수 없다. – rohanag