【发布时间】:2019-01-13 14:41:49
【问题描述】:
我必须使用 Python 2 进行异步调用。
我正在使用 Tornado 来完成此任务,但如果有更好的工具我可以更换工具。
以下代码在后台异步运行我的sleep 2 && echo hi 命令
from tornado import gen
import subprocess
import time
@gen.coroutine
def longProcess():
bashCommand = "sleep 5 && echo hi"
process = subprocess.Popen(bashCommand.split(), stdout=subprocess.PIPE)
output, error = process.communicate()
yield output
futures = [longProcess() for x in range(0, 5)]
while True:
if all(x.done() == True for x in futures):
break
time.sleep(1)
print('All futures resolved')
问题是在我的 bash 命令完成之前,x.done() 正在为所有期货返回 True。
我怎样才能将process.communicate() 变成未来(仅在关键字“hi”可用时才完成),以便我可以等待所有期货都完成,然后从期货中获取输出?
【问题讨论】:
标签: python-2.7 tornado