我正在使用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