Форум сайта python.su
Привет. Никак не могу вехать в асинхронность торнадо, потому что с 15 лет, страдаю на пхп головного мозга и синхронность, как побочный эффект. Что мне нужно сделать. Обработать гет запрос и сделать некоторые сложные манипуляции, которые будут блокировать loop, для примера возьмем sleep (10). В тот момент я хочу обработать все другие запросы, которые будут поступать на сервер.
Вот что я сейчас имею.
class TestHandler(tornado.web.RequestHandler, ThreadableMixin): def _worker(self): print 'test' time.sleep(10) self.finish(self.res) @tornado.web.asynchronous def get(self): tornado.ioloop.IOLoop.instance().add_callback(self.async_callback(self._worker)) self.render('template/chat.html')
Офлайн
Неблокирующий sleep в торнадо - это IOLoop.add_timeout(deadline, callback)
А если под
chandпонимается что-то больше чем таймаут, то тут уже нужно смотреть, что применить. Для некоторых баз данных есть асинхронные клиенты. Для остальных блокирующих операций придется придумывать что-то свое (например потоки, процессы). Или использовать асинхронную очередь задач (например http://celeryproject.org/).
сделать некоторые сложные манипуляции
Офлайн
Спасибо!
Интересно посмотреть другие варианты, асинхронной разработки
Офлайн
https://github.com/kmike/tornado-slacker/
И велосипедов не нужно
Офлайн