Задача Django Celery не срабатывает в процессе разработки
Я пытаюсь использовать периодические задачи, но не могу заставить их работать.
У меня есть тестовое задание
# handler/tasks.py
from celery import Celery
app = Celery()
@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
# Calls test('hello') every 2 seconds.
sender.add_periodic_task(2, test.s('hello'), name='add every 2')
@app.task
def test(arg):
print(arg)
Селерей настроен
# project dir
# salaryx_django/celery.py
from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'salaryx_django.settings')
app = Celery('salaryx_django')
# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
# salaryx_django/settings.py
# CELERY STUFF
BROKER_URL = 'redis://localhost:6379'
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = 'Europe/London'
Рабочие интимизированы
[2022-04-25 14:57:55,424: INFO/MainProcess] Connected to redis://localhost:6379//
[2022-04-25 14:57:55,426: INFO/MainProcess] mingle: searching for neighbors
[2022-04-25 14:57:56,433: INFO/MainProcess] mingle: all alone
[2022-04-25 14:57:56,452: WARNING/MainProcess] /Users/jonas/Desktop/salaryx_django/venv/lib/python3.8/site-packages/celery/fixups/django.py:203: UserWarning: Using settings.DEBUG leads to a memory
leak, never use this setting in production environments!
warnings.warn('''Using settings.DEBUG leads to a memory
[2022-04-25 14:57:56,453: INFO/MainProcess] celery@Air-von-Jonas ready.
и Redis ждет подключения
но ничего не происходит...
Проверки здравомыслия
(venv) jonas@Air-von-Jonas salaryx_django % celery -A salaryx_django status
-> celery@Air-von-Jonas: OK
(venv) jonas@Air-von-Jonas salaryx_django % celery -A salaryx_django inspect stats
-> celery@Air-von-Jonas: OK
{
"broker": {
"alternates": [],
"connect_timeout": 4,
"failover_strategy": "round-robin",
"heartbeat": 120.0,
"hostname": "localhost",
"insist": false,
"login_method": null,
"port": 6379,
"ssl": false,
"transport": "redis",
"transport_options": {},
"uri_prefix": null,
"userid": null,
"virtual_host": "/"
},
"clock": "631",
"pid": 15402,
"pool": {
"max-concurrency": 8,
"max-tasks-per-child": "N/A",
"processes": [
15405,
15406,
15407,
15408,
15411,
15412,
15413,
15414
],
"put-guarded-by-semaphore": false,
"timeouts": [
0,
0
],
"writes": {
"all": "",
"avg": "0.00",
"inqueues": {
"active": 0,
"total": 8
},
"raw": "",
"strategy": "fair",
"total": 0
}
},
"prefetch_count": 32,
"rusage": {
"idrss": 0,
"inblock": 0,
"isrss": 0,
"ixrss": 0,
"majflt": 25,
"maxrss": 61472768,
"minflt": 27337,
"msgrcv": 1415,
"msgsnd": 1109,
"nivcsw": 1584,
"nsignals": 0,
"nswap": 0,
"nvcsw": 1823,
"oublock": 0,
"stime": 0.36823999999999996,
"utime": 1.8312659999999998
},
"total": {},
"uptime": 631
}
1 node online.
Вы также должны запустить beat.
Из записи ударов документации
Функция add_periodic_task() добавит запись в настройку beat_schedule за кулисами
.
Простой запуск celery -A salaryx_django beat в другом процессе поможет вам начать работу. Для получения дополнительной информации читайте документацию.
