У меня есть проект Django с фоном Celery и периодическими заданиями. Я начал рабочий процесс год назад, и периодические задачи работают хорошо. Однако я только что обнаружил, что вызов кода основного сервера асинхронных функций не работает, apply_async()
/ delay()
приводит к синхронному выполнению функции, как и без их использования. Как я могу решить проблему? Моя версия сельдерея 4.2. Вот мой файл настроек Celery:
import os
from celery import Celery
from django.conf import settings
broker_url = 'amqp://<user>:<password>@localhost:5672/{project}'
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'MyProject.settings')
app = Celery('<project>', broker=broker_url)
app.config_from_object('django.conf:settings')
app.conf.update (
CELERY_TASK_SERIALIZER='json',
CELERY_ACCEPT_CONTENT=['json'],
CELERY_RESULT_SERIALIZER='json',
CELERYD_HIJACK_ROOT_LOGGER=False,
BROKER_URL=broker_url,
CELERY_RESULT_BACKEND='djcelery.backends.database.DatabaseBackend',
CELERY_ALWAYS_EAGER=True,
)
А это мой тестовый код:
from general.celery import app
from time import sleep
@app.task
def fun():
for i in range(5):
print('Sleeping')
sleep(2)
print('Awake')
def test():
print('Begin')
fun.apply_async(countdown=10)
print('End')
Это приводит к немедленному выводу:
Begin
Sleeping
...
Я также проверил у сельдерея inspect
:
from celery.task.control import inspect
print(inspect().stats())
В нем описаны следующие состояния:
{
'broker': {
'failover_strategy': 'round-robin',
'ssl': False,
'transport': 'amqp',
'heartbeat': 120.0,
'transport_options': {},
'insist': False,
'alternates': [],
'connect_timeout': 4,
'userid': '<user>',
'hostname': '127.0.0.1',
'login_method': 'AMQPLAIN',
'port': 5672,
'uri_prefix': None,
'virtual_host': '<project>'
},
'total': {},
'prefetch_count': 8,
'clock': '2299',
'pool': {
'put-guarded-by-semaphore': False,
'max-concurrency': 2,
'max-tasks-per-child': 'N/A',
'writes': {
'avg': '0.00%',
'inqueues': {
'total': 2,
'active': 0
},
'total': 0,
'raw': '',
'all': '',
'strategy': None
},
'timeouts': [0, 0],
'processes': [28728, 28729]
},
'pid': 28722,
'rusage': {
'stime': 0.3959,
'idrss': 0,
'maxrss': 57220,
'inblock': 2552,
'minflt': 24279,
'majflt': 3,
'msgsnd': 0,
'ixrss': 0,
'nswap': 0,
'nivcsw': 31,
'isrss': 0,
'nvcsw': 3326,
'utime': 2.492,
'msgrcv': 0,
'nsignals': 0,
'oublock': 0
}
}