Я хотел бы запустить метод с run_sync для запуска торнадо IOLoop, который запускает асинхронные методы.Как использовать run_sync для торнадо Python при создании подпрограмм async?
Вот идея:
@gen.coroutine
def async(string):
print string
@gen.coroutine
def sync():
string_list = yield async_call()
for string in string_list:
async(string=string)
loop = IOLoop.current()
loop.run_sync(lambda: sync)
Так что, все в синхронизации должен происходить синхронно, но порядок, в котором асинхронный называются не имеет значения. Это возможно с торнадо?
почти, вызывая асинхр на самом деле планировать и выполнять эту функцию, если ioloop будет остановлен. Функции Async требуют, чтобы ioloop запускался, уступал или нет. С 'yield' он ждет, пока асинхронное завершение. – kwarunek
@kwarunek Спасибо, что упомянули, я проверил это на своей машине и, похоже, работает, как вы говорите. Но для меня все еще не ясно: в случае, когда для метода async требуется больше времени, чем 'sync', IOLoop будет остановлен до того, как он закончится, и я действительно не представляю, будет ли' async' закончен правильно или нет. – pupizoid