Неблокирующие вызовы с использованием Tornado и Python Eve

#python #tornado #eve

#python #tornado #eve

Вопрос:

У меня есть приложение Eve с Tornado.

 http_server = HTTPServer(WSGIContainer(app))
http_server.listen(5000)
IOLoop.instance().start()
 

Я делаю post-вызов своего API, который занимает много времени и отправляет пользователю электронное письмо, когда процесс завершен.
Как я могу сделать вызов неблокирующим, чтобы пользователю не приходилось ждать.

Спасибо DC

Ответ №1:

Eve написан на Flask, поэтому по своей конструкции он блокирует код, и нет простого способа сделать его волшебным образом неблокирующим. Запуск вашего проекта eve в tornado также не поможет. Однако вы можете использовать gunicorn or hendrix , который может разветвлять ваше wsgi приложение, действовать как прокси-сервер и создавать впечатление, что ваш проект работает неблокирующим образом. Но я рекомендую использовать асинхронный / потоковый запускатель задач (что-то вроде celery ) для отправки почты. Этот метод потребует от вас переписать ваши функции рассылки с помощью task runner. Я надеюсь, что это поможет, если нет, пожалуйста, предоставьте еще несколько примеров того, что делает ваш код, и, возможно, мы сможем помочь.

Комментарии:

1. Спасибо. Да, я прошел этот маршрут. Работает идеально. Мне потребовалось некоторое время, чтобы понять.