Я запускаю несколько рабочих-пулеметчиков с настройкой workers=4
. Насколько я понимаю, у меня есть 5 разных процессов: один главный процесс-пулеметчик и 4 других рабочих процесса. Могу ли я получить информацию о том, какой работник в данный момент обслуживает запрос? Итак, могу ли я получить любой идентификатор воркера внутри самого воркера, например, на каждый запрос отправить ответ с содержимым: этот запрос был обслужен worker: worker_id?
Получить идентификатор рабочего от самого рабочего Gunicorn
Ответы (2)
В целях отладки вы можете использовать обработчик post_request для регистрации рабочего pid
def post_response(worker, req, environ, resp):
worker.log.debug("%s", worker.pid)
person
chuan
schedule
20.04.2016
Спасибо, это то, что мы на самом деле делаем
- person Most Wanted; 21.04.2016
Как использовать его в файле Python? Как мы можем печатать идентификатор рабочего с каждым запросом?
- person neel; 09.08.2016
@neel, если вы хотите, чтобы этот код работал, поместите фрагмент, например, в
gunicorn_config.py
, а затем запустите свой код с помощью gunicorn app_module:app --config gunicorn_config.py
, чтобы он подхватил этот хук и записал желаемую информацию.
- person Most Wanted; 11.08.2016
В рабочем коде просто используйте
import os
print(os.getpid())
Идентификатор процесса - достаточно хороший идентификатор для такого случая. Другой вариант, который, очевидно, является излишним, - создать на этом этапе файл идентификатора рабочего стола для каждого рабочего https://docs.gunicorn.org/en/stable/settings.html?highlight=hooks#post-worker-init и при необходимости прочтите его. Не забудьте удалить этот файл при выходе https://docs.gunicorn.org/en/stable/settings.html?highlight=hooks#worker-exit.
person
Most Wanted
schedule
10.04.2019
import os; print(os.getpid())
- person Most Wanted   schedule 11.08.2016