There's a built-in method run_sync
in IOLoop
to run a single call and then stop the loop, so it's pretty trivial to just add an event loop to a plain python script provided you have tornado in the PYTHONPATH.
With the concrete example:
from tornado import gen, ioloop
@gen.coroutine
def another_async_func(x):
print "aaf"
raise gen.Return(x + 1)
@gen.coroutine
def myfunc(x):
print "myfunc"
y = yield another_async_func(x)
print "back"
raise gen.Return(y)
@gen.coroutine
def main():
y = yield myfunc(1)
print "Callback called with %d" % y
if __name__ == "__main__":
ioloop.IOLoop.instance().run_sync(main)
This outputs:
myfunc
aaf
back
Callback called with 2
Note that run_sync
doesn't nest well; if you call run_sync
in a function called by run_sync
on the same IOLoop
the completion of the inner call will stop the IOLoop
and no further yield
s after the inner call will return.