python守护进程,不写入文件

时间:2013-12-09 23:51:21

标签: python multiprocessing

我正在使用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也不会将输出打印到文件。但我可以忍受这一点。但我仍然想了解发生了什么。

1 个答案:

答案 0 :(得分:3)

由于我的评论成功,我会指出我说的话。 open()函数有第三个参数 - buffering

  

可选的buffering参数指定文件所需的缓冲区   size:0表示无缓冲,1表示行缓冲,任何其他正数   value表示使用(大约)该大小的缓冲区(以字节为单位)。一个   负缓冲意味着使用系统默认值,这通常是   为tty设备缓冲线路并为其他文件完全缓冲。如果省略,则使用系统默认值

传递0作为第三个参数,您以无缓冲模式打开文件,以便立即显示更改。