Python で複数プロセスたちあげて結果を非同期で処理する その2
昨日のやつ の tornado 版。
from __future__ import print_function from tornado import gen from tornado.concurrent import Future from tornado.process import Subprocess def process(*cmdline): f = Future() p = Subprocess(cmdline, stdout=Subprocess.STREAM) p.stdout.read_until_close(print) p.set_exit_callback(f.set_result) return f @gen.coroutine def main(): yield [ process('sh', '-c', 'sleep 3 && echo echo3'), process('sh', '-c', 'sleep 2 && echo echo2'), process('sh', '-c', 'sleep 1 && echo echo1'), ] if __name__ == '__main__': from tornado.ioloop import IOLoop IOLoop.instance().run_sync(main)
defer.gatherResults
相当が無いみたいだけど、 list of Future を yield すればいい感じにやってくれるっぽい。