【发布时间】:2017-05-18 15:17:24
【问题描述】:
我使用 celery beat 设置了一个周期性任务。任务运行,我可以在控制台中看到结果。 我想要一个 python 脚本来回忆任务抛出的结果。
我可以这样做:
#client.py
from cfg_celery import app
task_id = '337fef7e-68a6-47b3-a16f-1015be50b0bc'
try:
x = app.AsyncResult(id)
print(x.get())
except:
print('some error')
无论如何,如您所见,对于此测试,我必须复制 celery beat 控制台(可以这么说)抛出的 task_id 并将其硬编码到我的脚本中。显然,这在实际生产中是行不通的。
我在 celery 配置文件中设置了task_id:
#cfg_celery.py
app = Celery('celery_config',
broker='redis://localhost:6379/0',
include=['taskos'],
backend = 'redis'
)
app.conf.beat_schedule = {
'something': {
'task': 'tasks.add',
'schedule': 10.0,
'args': (16, 54),
'options' : {'task_id':"my_custom_id"},
}
}
这样我可以这样读:
#client.py
from cfg_celery import app
task_id = 'my_custom_id'
try:
x = app.AsyncResult(id)
print(x.get())
except:
print('some error')
这种方法的问题是我丢失了之前的结果(之前调用client.py)。
有什么方法可以读取 celery 后端中的 task_id 列表吗?
如果我有多个定期任务,我可以从每个定期任务中获取task_id 的列表吗?
我可以使用app.tasks.key() 来完成这个,如何?
pd:不是英语母语,加上 celery 新手,如果我用错了一些术语,请多多关照。
【问题讨论】:
-
我突然想到,为了得到我想要的东西(从其他 python 实例中获取结果),我需要使用 redis 函数来存储和检索值。我将使用 zadd 将结果写入 redis,并在“client.py”上使用 zrange 来检索它们。
标签: python-3.x celery