Рабочий тайм-аут Gunicorn
У меня есть приложение Django, работающее в Gunicorn за Nginx. Все работает отлично, вызывается для одной странной вещи: у меня есть "скачать" и RESTful json API. Когда вы вызываете представление загрузки, я использую urllib2 для доступа к json API для получения информации. И когда я пытаюсь выполнить этот http-запрос на json api, запрос истекает с ошибкой HTTP Ошибка 504: Тайм-аут шлюза.
Когда я запускаю код с сервером. /manage.py, все работает нормально. HTTP-запрос на json api также занимает всего несколько секунд, поэтому нет опасности перехвата таймаута.
Здесь Ситуация в псевдокоде:
myproject/views.py: (доступно как: http://myproject.com/download)
1 def download(request, *args, **kwargs):
2 import urllib2
3 opener = urllib2.build_opener()
4 opener.open('http://myproject.com/api/get_project_stats')
Вызов opener.open()
в строке 4 запускается в тайм-аут при запуске в Gunicorn при работе с ./manage.py runserver
everytihng работает нормально (а вызов api занимает всего несколько секунд).
У кого-то была такая же проблема? И что более важно: как вы его решили?
Ответы
Ответ 1
У меня была такая же проблема с использованием Gunicorn, nGinx, Django и Requests
каждый раз, когда я делал:
response = requests.get('http://my.url.com/here')
рабочие теряют время
Я решил проблему, переключившись с Syncronous (sync) на рабочих асинхронных (eventlet).
если вы запускаете командную строку add:
-k 'eventlet'
если вы используете файл конфигурации, добавьте:
worker_class = "eventlet"