У меня есть блок кода, похожий на то, что ниже. Он работает так, как я ожидаю / хочу, но я хотел бы иметь возможность периодически проверять / распечатывать stderr / stdout этих фоновых / асинхронных c процессов. Из чтения документов кажется, что это возможно через потоки, но те немногие вещи, которые я пробовал, не принесли мне ничего полезного. Очень обобщенно c, я бы хотел сделать что-то вроде:
- запустить эти три процесса в фоновом режиме
- , пока они все еще работают, запустить некоторые другие команды на удаленном хосте (для проверки загрузки ЦП или чего-либо еще)
- также, пока они еще работают, продолжайте выполнять локальный код (возможно, запуск других процессов)
- , когда все они будут завершены, продолжайте делать вещи.
Я получил работу # 1 и # 4, но я не 'определил правильное расположение / комбинацию join()
и все, что дает мне доступ к stderr / stdout потоки, которые, я уверен, будет содержать атрибут promise.runner.stdout
.
promises, results = {}, {}
results = {}
with fabric.Connection(cfg['sim_host'], connect_timeout=15) as c:
with c.cd(cfg['sim_dir']):
cards = ['convert_rp', 'convert_lc', 'convert_fixed']
for card in cards:
promises[card] = c.run(cmds[card], asynchronous=True) ## launch my async commands
for card in cards:
results[card] = promises[card].join() ## join and wait for all to finish
for card in cards:
print (f"output from {card}:{results[card].stdout}\n") ## print the output
return results