在Celery文档中,有一个检查执行任务的示例:
您可以使用active()获取活动任务列表:
Run Code Online (Sandbox Code Playgroud)>>> i.active() [{'worker1.example.com': [{'name': 'tasks.sleeptask', 'id': '32666e9b-809c-41fa-8e93-5ae0c80afbbf', 'args': '(8,)', 'kwargs': '{}'}]}]
但是这个调用只返回由参数获得的参数表示repr().有没有办法获得序列化的任务参数?
好的,我会把它作为一个答案.希望这能解决您的问题.
Celery为args提供了一个字符串.要处理它,并获得一个列表:
args = '(5,6,7,8)' # from celery status
as_list = list(eval(args))
Run Code Online (Sandbox Code Playgroud)
当然,eval()有点危险,所以你可能想要使用文字eval:
import ast
args = '(5,6,7,8)' # from celery status
as_list = list(ast.literal_eval(args))
Run Code Online (Sandbox Code Playgroud)
这就是我在工作流程中解析Celery args的方法.这有点痛.
你是多么愿意破解Celery核心代码?通过.active()返回的表示最终通过以下代码:https://github.com/celery/celery/blob/b1deab39aad2fdec95f48b9f6e19ca1967285544/celery/utils/saferepr.py#L68
并根据请求设置:https: //github.com/celery/celery/blob/master/celery/worker/request.py#L120
您可以修改这些函数以返回您想要的对象的任何表示...当然这样做可能会破坏其他东西.
此外,@ economy对可能评估报告的评论很好.一切都取决于你的主要目标.
| 归档时间: |
|
| 查看次数: |
574 次 |
| 最近记录: |