У меня огромный проект django, и для работы мне нужно использовать Instagram API и его модель подписки. Для подписок мой сервер должен быть очень отзывчивым и быть готовым к асинхронной работе, чтобы настроить ловушку, чтобы получать уведомления после публикации пользователем. Или это то, что предлагает документация. Будет ли хорошо использовать там Tornado? Только для этой небольшой части или я могу сделать это с помощью Django эффективным способом? если да, то как?
Как использовать Tornado для работы с Django? Это хорошее решение?
Ответы (3)
Вы можете использовать контейнер WSGI поверх Tornado для размещения любого приложения WSGI, включая Django, однако, когда вы делаете это, приложение WSGI по-прежнему работает как блокирующее приложение и не будет волшебным образом работать как асинхронное приложение. Таким образом, когда Django обрабатывает запрос, Django не может одновременно обрабатывать другой запрос. Решение на этом этапе не сильно отличается от запуска однопоточного сервера WSGI, и вам потребуется несколько экземпляров Tornado для обработки одновременных запросов.
Так что все действительно зависит от того, что вы подразумеваете под асинхронностью. Вы, конечно, не можете использовать API прямого асинхронного программирования Tornado в Django. Таким образом, нет большой выгоды от использования Tornado с Django через интерфейс WSGI.
Насколько я понимаю, вы говорите об этом абзаце в документах Instagram.
Вы должны построить свою систему так, чтобы она принимала несколько объектов обновления для каждой полезной нагрузки, хотя часто будет включен только один. Кроме того, вы должны подтвердить POST в течение 2-секундного тайм-аута — если вам нужно выполнить дополнительную обработку полученной информации, вы можете сделать это в асинхронной задаче.
Это еще один тип «асинхронности», который предоставляет Tornado. Я думаю, что Django + Celery подойдет для этого лучше.
Ваше приложение будет работать следующим образом:
- Вы получаете JSON-данные от Instagram
- Создайте задачу сельдерея, например.
instagram_process.delay(request.raw_post_data)
илиinstagram_process.delay(request.body)
в зависимости от вашей версии Django - Ответ в Instagram с кодом статуса 200
- В задаче
instagram_process
вы выполняете всю свою обработку - анализируете JSON, сохраняете его в базе данных и все остальное, что вам нужно.
Если вы хотите проверить X-Hub-Signature
, вы можете либо сделать это между шагами 1 и 2, либо передать этот заголовок задаче и проверить подпись на шаге 4.
Вы можете использовать tornado.wsgi для интеграции Tornado с другими фреймворками, совместимыми с WSGI. Подробности смотрите в этом демонстрационном проекте:
https://github.com/bdarnell/django-tornado-demo
node.js
. - person Burhan Khalid   schedule 24.10.2012Tornado
иnode.js
будет большая разница? - person Igor   schedule 24.10.2012