python异步执行命令_如何从Python异步运行外部命令?

如果要并行运行多个进程,然后在它们产生结果时对其进行处理,可以使用如下所示的轮询:from subprocess import Popen, PIPE

import time

running_procs = [

Popen(['/usr/bin/my_cmd', '-i %s' % path], stdout=PIPE, stderr=PIPE)

for path in '/tmp/file0 /tmp/file1 /tmp/file2'.split()]

while running_procs:

for proc in running_procs:

retcode = proc.poll()

if retcode is not None: # Process finished.

running_procs.remove(proc)

break

else: # No process is done, wait a bit and check again.

time.sleep(.1)

continue

# Here, `proc` has finished with return code `retcode`

if retcode != 0:

"""Error handling."""

handle_results(proc.stdout)

那里的控制流有点复杂,因为我试图使它变小——你可以根据自己的喜好重构。:-)

这有一个优势,即首先为早期完成请求提供服务。如果您在第一个运行的进程上调用communicate,结果发现运行时间最长,则其他运行的进程在您可以处理其结果时将一直处于空闲状态。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值