Celery任务更新

4
我正在调查Celery在处理长时间运行的任务时的能力,用户希望能够观察进度。应用程序基于Django,任务通过RPC启动,并涉及将数据库与文件系统中的文件同步。

在任务内部,我想记录多个级别的日志(警告、错误、信息等),我还希望用户能够根据日志级别过滤消息,因此我想将日志记录到我的数据库中。

我的问题是:

  • 是否建议将日志记录到与我的Django应用程序相同的数据库中?
  • 如何设置Celery使用Python标准日志模块将日志记录到数据库中?
1个回答

4
为什么不直接使用当前状态更新任务并使用任务ID进行查询。这样,您就可以透明地使用配置的任何后端,而不是超载您的数据库。
Ask在这里解释了这种技术。
YourTaskObject(Task):
    run(self, **kwargs):
        while true:
            # do some work
            self.backend.store_result(self.request.id, result={"percent_done": number}, status="PROGRESS")

然后你只需使用AsyncTask的结果:
result = YourTaskObject.AsyncResult(task_id=task_id)
if not result.ready():
    progress = result.result.percent_done
else:
    ...

你的方法确实很有趣,因为它除了必须的后端之外,不涉及任何数据库/文件。我会进一步调查它。 - Constantinius
它使用您配置的任何后端。这可以是您的数据库,也可以是rabbitmq、redis或mongodb。 - Rob Osborne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接