4

我正在研究 celery 在较长时间运行的任务方面的功能,用户希望在其中观察进度。该应用程序基于 Django,任务通过 RPC 启动,并涉及将数据库与文件系统上的文件同步。

在任务中,我想登录多个级别(WARN、ERROR、INFO、...),并且我还希望用户根据日志级别过滤消息,所以我想登录到我的数据库是可行的。

我的问题是:

  • 是否建议登录到我的 Django 应用程序正在使用的同一数据库?
  • 如何设置 celery 以使用 Python 标准日志记录模块登录数据库?
4

1 回答 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:
    ...
于 2012-09-05T21:28:48.823 回答