【问题标题】:Celery task updates芹菜任务更新
【发布时间】:2012-08-30 05:59:06
【问题描述】:

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

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

我的问题是:

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

【问题讨论】:

    标签: django celery


    【解决方案1】:

    为什么不使用当前状态更新任务并使用任务 ID 进行查询。然后,您就可以透明地使用您配置的任何后端,而不是让您的数据库过载。

    Ask 解释技术here

    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:
        ...
    

    【讨论】:

    • 您的方法绝对很有趣,因为它不涉及任何数据库/文件,除了它需要的后端。我会进一步调查。
    • 它使用您配置的任何后端。那可能是你的数据库,也可能是 rabbitmq 或 redis 或 mongodb。
    猜你喜欢
    • 2012-02-06
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    • 2012-12-01
    • 2014-04-16
    • 2018-07-04
    • 2011-11-20
    • 2017-10-14
    相关资源
    最近更新 更多