如果你将你的项目连接到 Flower,那么你可以在 localhost:5555/task/ 看到关于任务的完整数据(正在执行、已完成)。如何通过没有花的python代码获取所有这些数据?Redis 用作后端。
我尝试根据教程连接django -celery-results 模块。使用以下代码时:
from django_celery_results.models import TaskResult
print TaskResult.objects.all()
我收到
<QuerySet []>
settings.py 设置:
INSTALLED_APPS = [
...
# celery results
'django_celery_results',
...
]
REDIS_URL = 'redis://localhost'
CELERY_RESULT_BACKEND = REDIS_URL
Redis 工作,这是花本身(有机会看到任务)和redis-cli 确认的:
>redis-cli ping
>PONG
UPD1:由于后端正在进行工作,我决定直接向后端请求已完成的任务。代码采用以下形式:
import redis
from celery import result
r = redis.Redis("localhost", 6379)
t = r.keys(pattern="celery-task-meta*")
for i in t:
y = i[17:]
res = result.AsyncResult(y)
print "{0} {1}".format(res, res.status)
我得到一个像
7b3d6735-fdaf-4511-a77d-e814393db786 SUCCESS
2c413ffc-342e-4aa4-ba5c-e019035d0caa FAILURE
35539d7b-fa44-4b3f-a10f-8b6d001448b2 FAILURE
我还可以参考“Traceback”属性来找出错误的原因。但现在我不知道具体 id 背后的名字。而花中的数据要多得多。
UPD2有一个特定的类celery.worker.request,它有一堆属性,根据文档,这个类允许“指定如何执行任务的类。 ”。根据文档,该类具有我通常需要的许多属性。但我不知道如何到达这些属性。
UPD3我只为当前正在运行的任务而遇到的类,并且不允许访问已经完成的任务
有一个django-celery-monitor插件,可以将所需的功能添加到管理面板。该插件将任务的结果和其他参数输入到一个新的数据库表中。他借助另外推出的 celery 活动监视器(所谓的相机\相机)来完成此操作。该插件相当容易修改。该插件还允许您过滤结果并运行选定的任务。
该插件非常方便,但并不能完全解决我的具体问题。至少在其中您可以看到如何实施该计划。如果有人对管理面板中任务部分的放置不感到尴尬,请随意使用它。
还值得一提的是花——作者没有设法理解这个插件的机制(只是缺乏知识和经验),但是单独启动的 Web 服务器在复杂的项目中并不是一个非常优雅的解决方案。