【发布时间】:2012-12-03 05:37:12
【问题描述】:
使用 Windows 7 + python 2.6,我正在尝试并行运行模拟模型。我可以通过在我的文件浏览器中双击它们来启动可执行文件的多个实例。但是,使用Popen 的异步调用会导致每个连续实例中断前一个实例。对于它的价值,可执行文件将文本返回到控制台,但我不需要以交互方式收集结果。
这是我目前所处的位置:
import multiprocessing, subprocess
def run(c):
exe = os.path.join("<location>","folder",str(c),"program.exe")
run = os.path.join("<location>","folder",str(c),"run.dat")
subprocess.Popen([exe,run],creationflags = subprocess.CREATE_NEW_CONSOLE)
def main():
pool = multiprocessing.Pool(3)
for c in range(10):
pool.apply_async(run,(str(c),))
pool.close()
pool.join()
if __name__ == '__main__':
main()
在搜索 SO 以获得解决方案后,我了解到使用多处理可能是多余的,但我需要一些方法来限制工作的核心数量。
【问题讨论】:
-
您是否尝试使用
cwd参数为每个子进程指定不同的工作目录?exe可能会将一些文件写入当前目录,从而干扰并行执行。 -
您可以使用
os.path.join连接路径部分,而不是直接进行字符串操作 -
Popen 立即返回,因此您的脚本不会限制并行子进程的数量。您可以使用
subprocess.call()阻止直到子进程完成。 -
os.path.join,是的,当然。已更新。 -
this answer demonstrates various techniques to limit number of concurrent subprocesses:它显示基于
multiprocessing.Pool、concurrent.futures、threading + Queue的解决方案
标签: python asynchronous multiprocessing subprocess executable