Я пытаюсь запустить автономный скрипт вне приложения Django, которое взаимодействует с очередью Redis и использует модуль Python rq
. Все работает нормально, но где-то либо обновление до Python 3.8 (с 2.7), либо обновление с Django 2.2 (с 1.11), либо с rq
до 1.2.2 (с 0.13) rq
перестали соблюдать Django LOGGING
конфиг. Вот как выглядит мой Django settings.py
файл:
LOGGING = {
"version": 1,
"disable_existing_loggers": False,
"formatters": {
"verbose": {
"format": "%(asctime)s [%(process)d] [%(levelname)s] pathname=%(pathname)s lineno=%(lineno)s %(message)s",
"datefmt": "%Y-%m-%d %H:%M:%S"
},
"simple": {
"format": "%(asctime)s [%(name)s] %(levelname)s - %(message)s"
}
},
"handlers": {
"null": {
"level": "DEBUG",
"class": "logging.NullHandler"
},
"console": {
"level": "DEBUG",
"class": "logging.StreamHandler",
"formatter": "simple"
}
},
"loggers": {
"django.request": {
"handlers": ["console"],
"level": "ERROR",
"propagate": True
},
"api": {
"handlers": ["console"],
"level": "DEBUG",
"propagate": True
},
"worker": {
"handlers": ["console"],
"level": "DEBUG",
"propagate": True
},
"rq.worker": {
"handlers": ["console"],
"level": "ERROR",
"propagate": True
}
}
}
А вот как выглядит мой worker.py
:
import django
django.setup()
import os
import logging
import redis
import multiprocessing
from rq import Queue, Connection
from rq.worker import HerokuWorker
logger = logging.getLogger("worker")
if __name__ == "__main__":
redis_url = os.getenv("REDISTOGO_URL", None)
if redis_url:
conn = redis.from_url(redis_url)
listen = ["high", "default", "low"]
thread_count = int(os.getenv("WORKER_THREAD_COUNT", "4"))
logger.debug("Setting up worker script, threads=%d", thread_count)
with Connection(conn):
workers = []
for i in range(thread_count):
worker = HerokuWorker(map(Queue, listen))
p = multiprocessing.Process(target=worker.work)
workers.append(p)
p.start()
else:
logger.error("Could not find REDISTOGO_URL environment variable")
Вы видите, у меня есть rq.worker
установлен на ERROR
уровень, но я получаю INFO
сообщений на консоли. Раньше это работало просто отлично, но, к сожалению, я не замечал этого до тех пор, пока не закончил обновление. Я попытался удалить раздел rq.worker
из settings.py
, и сообщения по-прежнему печатались, но не в том формате, который я определил. Итак, я знаю, что мой settings.py
файл читается правильно. Кто-нибудь еще сталкивался с этим или есть предложения? Я действительно не хочу раскошелиться rq
только для решения этой проблемы.