我正在使用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也不會將輸出打印到文件。但我可以忍受這一點。但我仍然想知道發生了什麼。
試着用'0'打開文件作爲'open'功能的第三個參數 – Deck
你能給我們一個完整的,可運行的例子嗎?請參閱[SSCCE](http://sscce.org)獲取指導。事實上,它看起來像是要求我們在一個你沒有向我們展示代碼的函數中調試代碼。 – abarnert
謝謝@Deck,就是這樣,不敢相信我對此不知道。 – rohanag