python 尝试多进程的困惑

hebgm 2011-04-18 10:36:48
每个文件夹都包含数据文件,参数文件和一个可执行文件exe共三项。不需要传值给exe文件,双击exe就可以运算出结果,执行完毕exe会自动关闭,结果生成单独文件不需要读,但文件夹太多了(60多个)不想打开每个文件夹去双击。写了段python代码如下:

import os
import sys
#import subprocess

dir=os.getcwd()
for root, dirs, files in os.walk(dir):
for subfiles in dirs:
print os.path.join(root,subfiles)
os.chdir(os.path.join(root,subfiles))
os.system('xxx.exe')


原理大概是进入每个文件夹激活exe(初级了,呵呵),但是他是单进程的,一个文件夹运算完毕才开始下一个。搞下来耗时也太长了,更惭愧的这样太对不起多核处理器了。

导入subprocess,将os.system('xxx.exe')改为subprocess.Popen('xxx.exe')。exe就不能自动执行了,问题多多,很困惑啊,在此提问,希望高人指点一二...
...全文
279 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
iambic 2011-04-19
  • 打赏
  • 举报
回复
不能自动执行了?出错没有?怎么看出来没自动执行的?
I_NBFA 2011-04-19
  • 打赏
  • 举报
回复
os.system是同步的,找找异步的(popen好像就是),另外你确定有必要多进程?CPU的基本执行单元是
线程,进程本身是不可执行的,执行的只是它的主线程,而进程的代价比线程高的多。
iambic 2011-04-19
  • 打赏
  • 举报
回复
这很容易,你搞个queue,然后开八个线程,每个线程起一个进程,等待进程结束,进程结束了再从queue里拿下一个任务。很直白的算法就可以了。愿意用multiprocessing什么的也可以,不过我觉得用不着费那事。而且你的计算实际是在子进程里,不是在线程里,Python本身不是CPU瓶颈,不会收Python的多核限制影响。
hebgm 2011-04-19
  • 打赏
  • 举报
回复

import os
import sys
import subprocess

dir=os.getcwd()
for root, dirs, files in os.walk(dir):
for subfiles in dirs:
print os.path.join(root,subfiles)
os.chdir(os.path.join(root,subfiles))
subprocess.Popen('xxx.exe')

改为subprocess.Popen()可以计算了。运行中同时开启了几十个cmd窗口,只能八个窗口出结果,受计算资源的限制其他窗口都在哪儿僵尸着,一个结束后下一个才开始运算。线程进程的问题还不是太清楚至少它能工作了,想搞的是同时开始八个运算,任何一个结束后下一个自动开始补上,像迅雷下载多任务一样,比如有50个下载任务,限制同时下载5个,一个下载任务完成后下一个任务自动开始。

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧