2011-08-25 55 views
0

我有一个代码,它在最大4个进程中一次产生。它看起来提交任何新闻工作,如果它存在,它运行Python代码将输出写入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')) 

我有几个问题:

  1. 当我尝试写在日志文件中的输出或错误,不写直到过程完成。有可能在过程运行时将输出写入文件,因为这有助于了解它在哪个阶段运行。
  2. 当一个进程完成后,我希望运行队列中的下一个作业,而不是等待所有子进程完成,然后守护进程启动任何新进程。

任何帮助将不胜感激。谢谢!

+1

请格式化一下。这并不难,而且你在发布之前已经有了预览。 –

+0

*停止编辑并打破它,@shash!* –

+0

对不起,以后我会小心的。谢谢你纠正我。 – shash

回答

1

关于第1,尽量调整用于日志文件buffering

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的多处理模块。

+0

我尝试了两个选项,但它不起作用。它缓存所有内容,然后将其写入文件中。 PROC = subprocess.Popen([ “蟒”, “test.py”,显示目录],标准输出=开放(日志文件, 'W',0))= PROC subprocess.Popen([ “蟒”, “test.py”,显示目录],标准输出=开放(日志文件, 'W',1)) – shash