Bezdepbonusu7Программирование: статьи и ответы

Вопрос

UWSGI: Python concurrent.futures зависает на всех процессах uWSGI, кроме одного

Автор вопроса: ZachОтветов: 1

Я использую модуль concurrent.futures Python (версия модуля 2.1.3, версия Python 2.7.3). У меня есть nginx, работающий с 4 рабочими процессами, и 4 запущенных uWSGI (в Ubuntu точно) в качестве демона выскочки со следующей конфигурацией uwsgi (обратите внимание, что enable-threads - это правда, поэтому GIL доступен, а lazy - это правда):

virtualenv=[ path to venv ]
chdir=[ path to python project ]
enable-threads=true
lazy=true
buffer-size=32768
post-buffering=true
processes=4
master=true
module=[ my app ].wsgi
callable=wsgi_app
logto=/var/log/uwsgi.log
pidfile=[ replaced ]
plugins=python27
socket=[ replaced, but works fine ]

Все приложение работает нормально, но кажется, что какой-то отсутствующий контекст недоступен для пула фьючерсов: когда я вызываю somefunc() без future(), все хорошо, но когда я вызываю somefunc() с future, HTTP-запрос ( Я использую Flask) зависает довольно долго, прежде чем сбой.

Единственные записи в файле журнала связаны с HTTP-запросами и общими элементами запуска wsgi, такими как:

WSGI application 0 (mountpoint='') ready on interpreter 0x11820a0 pid: 26980 (default app)

Как я могу получить некоторое представление о выполнении фьючерсов или выяснить, какой контекст может быть недоступен для пула фьючерсов?

Имеет ли это смысл?

Заранее спасибо.

pythonnginxuwsgiwsgi

Ответы

Ответ 1 · рейтинг 2 · roberto

Если вы используете ProcessPoolExecutor вместо потоков, обязательно добавьте close-on-exec в параметры uWSGI, иначе сокет соединения с клиентом/веб-сервером будет унаследован после fork()

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы