我无法将 celery 结果存储在我的 django-db 后端中 - 我尝试了很多解决方案,但没有任何运气。我有点卡在这一点上..但是,我怀疑这与 cockroach-db 有关。
我的设置使用 Django 4.1、Postgres (cockroach-db) 和 Redis (Heroku)。
我正常启动 django,然后使用以下命令启动 celery Worker:
celery -A kmaofny worker --loglevel=info -E
我的芹菜工作人员看到任务,并且它们已完成,但它不会将结果存储在我的数据库中。
这是我的设置和配置:
设置.py
INSTALLED_APPS = [
...
'django_celery_results',
...
]
DATABASE_URL = POSTGRES_CREDS['URI']
DATABASES = {
'default': dj_database_url.config(default=DATABASE_URL, engine='django_cockroachdb')
}
# Celery Configuration
REDIS_URL = os.environ.get('REDIS_URL', BROKER_URL)
CELERY_BROKER_URL = REDIS_URL
CELERY_RESULT_BACKEND = 'django-db'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
DJANGO_CELERY_RESULTS_TASK_ID_MAX_LENGTH=191
CELERY_TASK_TRACK_STARTED = True
CELERY_TASK_TIME_LIMIT = 30 * 60
芹菜.py
import os
from celery import Celery
# Set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'kmaofny.settings')
app = Celery('kmaofny')
app.config_from_object('django.conf:settings', namespace='CELERY')
# Load task modules from all registered Django app configs.
app.autodiscover_tasks()
初始化.py
from .celery import app as celery_app
__all__ = ('celery_app',)
感谢任何帮助 - 我在这一点上没有任何错误。此外,当我在 django 视图中调用以下命令时,我得到
<django_celery_results.backends.database.DatabaseBackend object at 0x000001A9B3B64040>
:
result = add_numbers.delay(1,5)
print(result.backend)
我调用
task.backend
检查数据库是否在设置中正确设置,在 celery Worker 上使用 -E 标志,并在 settngs.py 中配置 CELERY_RESULT_BACKEND='django-db'
我不确定这是否是答案,但显然所有任务(即使已完成)仍列为状态=待处理。
我解决了这个问题,现在当我用这个运行 celery 工作程序时,我的 django 数据库后端收到任务状态更新(和任务状态' = 成功)
celery -A kmaofny worker --loglevel=info -E --pool=solo
而不是
celery -A kmaofny worker --loglevel=info -E
根据其他人的说法,这可能是 Windows 问题。见链接:
Celery 任务始终待处理 https://github.com/celery/celery/issues/2146 Celery“入门”无法检索结果;一直待处理
谢谢你,克里斯! 我也遇到同样的问题,看看是否能解决。 糟糕的是,q 和 a 都被否决了。当我获得声誉时会添加+1😂