Я должен использовать Python 2 для выполнения асинхронных вызовов.
Я использую Торнадо для достижения этой цели, но если есть лучший инструмент, я могу поменять инструменты.
Следующий код выполняет мою 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')
Проблема в том, что x.done()
возвращает True
для всех фьючерсов до завершения моей команды bash.
Как я могу превратить process.communicate()
в будущее (только после того, как ключевое слово "hi" станет доступным), чтобы я мог дождаться завершения всех фьючерсов и получить, а затем получить выходные данные из фьючерсов?