我想使用subprocess.call
启动python脚本的多个实例,但启动脚本会等待每个实例完成。如何在不等待上一个工作完成的情况下,如何防止它一个接一个地等待?
step = 5
for n in range(5, 11, step):
subprocess.call(["python", cwd + "/" + "subprocess.py", str(n - step), str(n)])
答案 0 :(得分:3)
这是subprocess.call()
的记录行为,因此您无法以这种方式使用它。相反,您可以使用subprocess.Popen()
。
import subprocess
import os.path
processes = []
step = 5
for n in range(5, 11, step):
processes.append(subprocess.Popen(['python', os.path.join(cwd, 'child.py'), str(n - step), str(n)]))
for p in processes: # wait for the child processes to terminate, avoid zombies
p.wait()
请注意,命名文件subprocess.py
是个坏主意,特别是如果它与主脚本位于同一目录中 - import subprocess
将导入本地版本,而不是系统版本。我在上面的代码中将其重命名为child.py
。
父进程等待子进程也很重要。省略这一点可能导致Linux中的"zombie" processes。
如果您使用的是Python 3,则可以调查asyncio
模块的使用情况。
答案 1 :(得分:1)