Рабочий тайм-аут 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"