在Python中使用subprocess将输出写入文件
我有一段代码,最多可以同时启动4个进程。它会检查是否有新的任务提交,如果有,就会运行相应的Python代码。
for index,row in enumerate(rows):
if index < 4:
dirs=row[0]
dirName=os.path.join(homeFolder,dirs)
logFile=os.path.join(dirName,(dirs+".log"))
proc=subprocess.Popen(["python","test.py",dirs],stdout=open(logFile,'w'))
我有几个问题:
- 当我尝试将输出或错误信息写入日志文件时,文件不会立即更新,而是等到进程完成后才写入。有没有办法让输出在进程运行时就写入文件?这样我就能知道它正在进行到哪个阶段。
- 当一个进程完成后,我希望下一个排队的任务能立即运行,而不是等所有子进程都完成后,守护进程才开始新的任务。
任何帮助都非常感谢!
2 个回答
1
关于第一点,试着调整一下用于日志文件的缓冲设置:
open(logFile,'w', 1) # line-buffered (writes to the file after each logged line)
open(logFile,'w', 0) # unbuffered (should immediately write to the file)
如果这样能满足你的需求,建议你选择行缓冲,而不是无缓冲。
至于你提到的整体问题,正如@Tichodroma所建议的,试试Python的多进程模块吧。
1
关于第2点,你可以去看看这个链接:http://docs.python.org/library/multiprocessing.html