簡體   English   中英

python守護進程,不寫入文件

[英]python daemon process, doesn't write to file

我正在使用Multiprocessing.Queue在處理進程和守護進程之間進行通信。 守護程序從隊列中獲取輸出,並在無限循環中寫入文件。 該文件對象在守護進程printToFile本身中打開。

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()函數具有第三個參數- buffering

可選的buffering參數指定文件所需的緩沖區大小:0表示未緩沖,1表示行緩沖,任何其他正值表示使用(大約)該大小(以字節為單位)的緩沖區。 負緩沖意味着使用系統默認值,通常對tty設備使用行緩沖,而對於其他文件則使用完全緩沖 如果省略, 則使用系統默認值

傳遞0作為第三個參數,您將以無緩沖模式打開文件,因此更改將立即顯示在該文件中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM