Я написал приложение, которое выполняет задание из очереди и выполняет его асинхронно.Tornado asynchronous job in tornado gen coroutine
def job(self):
print 'In job'
time.sleep(0.01)
@gen.coroutine
def start_jobs(self):
jobs = filter(lambda x: x['status'] == 0, self.queue)
for job in jobs:
yield self.job()
print 'exit from start job'
Но этот код не работает.
Выход:
В работе
В работе
В работе и т.д.
Как это сделать правильно?
Как мне заставить работать с фьючерсами, и есть ли более простой способ сделать это с помощью Tornado?
Что делать, если я хочу добавить какую-то пользовательскую функцию вместо gen.sleep (random.random())? Я хочу добавить функцию, которая работает с job_id, и делать длительные вычисления. – cehmja
Конечно, просто вызовите эту функцию с помощью «yield». См. Мою статью emptysqua.re/blog/refactoring-tornado-coroutines/ –