python - 给定一个 Redis Broker 和一个 db-backend,Celery Task 请求首先写入哪里?
问题描述
无论如何询问redis,celery或postgres,以在任务完成之前跟踪任务请求?
配置:
BROKER_URL = "redis://localhost:6379"
CELERY_RESULT_BACKEND = "django-db"
from celery import Celery
from django.conf import settings
app = Celery(
"someapp",
)
现在,过了一会儿,表django_celery_results_taskresult
就有了任务,包括它的 id、task_id、task_name 和 result,等等。
id | task_name | status | date_done
------+-----------------------------------+---------+-------------------------------
2162 | someapp.pssystem.tasks.initialize | SUCCESS | 2019-07-16 16:55:41.101537-07
2163 | someapp.pssecurity.tasks.flush | SUCCESS | 2019-07-16 17:11:45.599822-07
2164 | someapp.pssecurity.tasks.flush | SUCCESS | 2019-07-16 17:18:49.798436-07
2165 | someapp.pssecurity.tasks.flush | SUCCESS | 2019-07-16 17:26:45.349578-07
2166 | someapp.pssecurity.tasks.flush | SUCCESS | 2019-07-16 17:31:49.27337-07
但这只是在任务成功完成或出现错误之后。我基本上是在启动长时间运行的批处理,这很容易需要 2-3 分钟,我希望能够确认任务已启动并在完成前轮询其状态。
如果我去redis-cli,那里的事情也不是很清楚,这看起来与芹菜工人的关系比其他任何事情都多:
127.0.0.1:6379> select 0
OK
127.0.0.1:6379> keys *celery*
1) "_kombu.binding.celery.pidbox"
2) "_kombu.binding.celeryev"
3) "_kombu.binding.celery"
127.0.0.1:6379> smembers "_kombu.binding.celeryev"
1) "worker.#\x06\x16\x06\x16celeryev.026d2bed-ebc8-4c8b-a8c1-732cd847b381"
2) "worker.#\x06\x16\x06\x16celeryev.2f6efd77-f931-4c01-b45f-000f3ab9f5bd"
3) "worker.#\x06\x16\x06\x16celeryev.c0da9ba7-31fd-4a6b-be62-685423c7b542"
4) "worker.#\x06\x16\x06\x16celeryev.09ece5fd-3a45-4912-9c0f-ea1f9e67c930"
5) "worker.#\x06\x16\x06\x16celeryev.ad784e1f-47ad-402f-8359-295c35138fba"
6) "worker.#\x06\x16\x06\x16celeryev.633275dc-a090-4c2f-9d18-1d6b2d00f8e5"
7) "worker.#\x06\x16\x06\x16celeryev.2ee3da5b-1d65-4f8c-b652-8907af7b6eb1"
8) "worker.#\x06\x16\x06\x16celeryev.617f6218-9382-4965-8d3e-c1ed70cf96e4"
9) "worker.#\x06\x16\x06\x16celeryev.64c9beef-2d35-418c-a562-b0a6f0c4054e"
127.0.0.1:6379> smembers "_kombu.binding.celery"
1) "celery\x06\x16\x06\x16celery"
版本:
postgres 9.6
celery 4.3.0
Django 2.2.3
django-celery-results 1.0.4
解决方案
多种监控任务的方法。
您可以使用
flower
来监控任务。它是 celery 分布式任务队列的实时监控器和网络管理员。 https://github.com/mher/flower或者您使用celery API来获取任务信息。
result = app.AsyncResult(task_id)
推荐阅读
- arrays - 嵌套循环JSON数组离子3
- jenkins - 无法从 Jenkins 构建步骤 ssh
- wpf - 如何将函数的结果绑定到 WPF 元素?
- c++ - 获取两个最大值的索引
- javascript - Geolocation-WatchPosition 尚未实现
- testing - 测试方法删除不起作用
- javascript - html表单在分辨率更改时更改位置
- python - 无法运行使用 Pyinstaller 编译的 Kivy 应用程序
- python - Python:利用6维数组的优势实现im2col?
- getstream-io - 通过 REST API 在 Getstream.io 上更新活动时遇到问题