django - DJCelery未将任务结果存储在Django SQLite DB中

标签 django sqlite rabbitmq celery djcelery

DJCelery不在我的Django SQLite数据库中存储任务结果。

我有一个现有的Django项目,已开始在其上设置Celery w / RabbitMQ。我启动了RabbitMQ服务器。我可以运行Celery python manage.py celeryd --verbosity=2 --loglevel=DEBUG和Celerybeat python manage.py celerybeat --verbosity=2 --loglevel=DEBUG。一切都随着错误启动,而我的定期示例任务也运行无误。

我使用pip install django-celery进行安装。我在已安装的应用程序中有djcelery并运行python manage.py migrate djcelery。我在我的settings.py文件的末尾添加了CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend'

当我运行python manage.py celeryd --verbosity=2 --loglevel=DEBUG时,启动文本显示:

...
- ** ---------- .> transport: amqp://guest:**@localhost:5672//
- ** ---------- .> results:
- *** --- * --- .> concurrency: 1 (prefork)
...


结果部分为空白向我表明该配置不正确,但我不知道如何。我尝试在celery.py文件中使用app.conf.update设置CELERY_RESULT_BACKEND,但得到了相同的结果。我省略了CELERY_RESULT_BACKEND,但是默认情况下没有结果。我还尝试使用'database'代替'djcelery.backends.database:DatabaseBackend',但这表明它正在尝试使用sqlalchemy代替djcelery

运行python manage.py runserver时,我可以看到带有表DJCELERYCrontabsIntervalsPeriodic tasksTasksWorkers部分。但是我的任务上没有任何数据。

谁能指出什么是错误的或丢失的?感谢您的时间。

最佳答案

tutuDajuju将我引向正确的方向-还有更多内容,所以我将其全部写下。我放弃使用djcelery来支持sqlalchemy,而在Django之外使用了单独的后端数据库。

在我的venv内部,运行了pip install sqlalchemy。然后,将CELERY_RESULT_BACKEND = 'db+sqlite:///celery_results.sqlite3'放在settings.py中。这将Celery连接到新的SQLite数据库以用于状态/结果。

运行celery -A <projectapp>.celery:app worker然后在启动消息中显示数据库:

...
- ** ---------- .> transport: amqp://guest:**@localhost:5672//
- ** ---------- .> results: sqlite:///celery_results.sqlite3
- *** --- * --- .> concurrency: 1 (prefork)
...


一开始我很担心,因为数据库文件不是在我的Django项目目录中创建的。这是因为我还没有执行任务。一旦执行了第一个任务,就可以正确创建数据库和表。

我通过运行脚本验证了任务结果已存储在数据库中:

from sqlalchemy import create_engine

engine = create_engine("sqlite:///celery_results.sqlite3")
connection = engine.connect()

result = connection.execute("select * from celery_taskmeta")

for row in result:
    print(row)

connection.close()


我通过以下方式找到表名:

print(engine.table_name())


希望这可以帮助某人。

关于django - DJCelery未将任务结果存储在Django SQLite DB中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38231042/

相关文章:

python - 通过电子邮件重置 Django 密码

c# - rabbitmq 消费者成为生产者

python - 如何处理我的login_required url?

python - 检索对象时包括整个外键对象

android - 安全的 SQLite 数据库

c# - 自动递增主键的SQLite表

java - 参数化查询抛出 IllegalArgumentException : Cannot bind argument

java - Spring Cloud Stream RabbitMq - 从源代码设置属性

objective-c - iOS : Unable to establish RabbitMQ connection from Swift

带有计数注释的 django admin list_display