【问题标题】:Query task state - Celery & redis查询任务状态 - Celery & redis
【发布时间】:2016-10-30 12:50:53
【问题描述】:

好的,我认为我有一个相对简单的问题,就像我正在用它撞砖墙。我有一个烧瓶应用程序和一个网页,允许您使用 celery 和 redis(broker) 在服务器端运行许多脚本。

我想做的就是当我开始一个任务时给它一个名字/ID(任务将被描绘成客户端的一个按钮),即

@app.route('/start_upgrade/<task_name>')
def start_upgrade(task_name):
    example_task.delay(1, 2, task_name=task_name)

然后在任务开始后,我想看看任务是否在单独的请求中运行/等待/完成,最好像;

@app.route('/check_upgrade_status/<task_name>')
def get_task_status(task_name):
    task = celery.get_task_by_name(task_name)  
    task_state = task.state
    return task_state # pseudocode

但我在文档中找不到类似的内容。我对芹菜很陌生,尽管仅供参考,所以假设我什么都不知道。另外为了更加明显,我需要能够从 python 查询任务状态,请不要使用 CLI 命令。

也欢迎任何实现我查询队列目标的替代方法。

【问题讨论】:

    标签: python redis celery celery-task


    【解决方案1】:

    当您使用delayapply_async 启动任务时,会创建一个对象AsyncResult,并包含任务的ID。要获取它,您只需将其存储在一个变量中。

    例如

    @app.route('/start_upgrade/<task_name>')
    def start_upgrade(task_name):
        res = example_task.delay(1, 2, task_name=task_name)
        print res.id
    

    您可以存储此 id 并将其与数据库中的其他内容相关联(或者像我在示例中所做的那样打印它)。

    然后您可以使用以下命令在 python 控制台中检查任务的状态:

    from celery.result import AsyncResult
    AsyncResult(your_task_id).status
    

    查看结果文档,您应该可以在那里获得所需的内容:http://docs.celeryproject.org/en/latest/reference/celery.result.html

    【讨论】:

      【解决方案2】:

      我最终从亚瑟的帖子中找到了我的问题的解决方案。

      结合redis我创建了这些函数

      import redis
      from celery.result import AsyncResult
      
      redis_cache = redis.StrictRedis(host='localhost', port=6379, db=0)
      
      def check_task_status(task_name):
          task_id = redis_cache.get(task_name)
          return AsyncResult(task_id).status
      
      def start_task(task, task_name, *args, **kwargs):
          response = task.delay(*args, **kwargs)
          redis_cache.set(task_name, response.id)
      

      这允许我为任务定义特定的名称。请注意,我还没有实际测试过这个,但它是有道理的。

      用法示例;

      start_task(example_task, "example_name", 1, 2)
      

      【讨论】:

        猜你喜欢
        • 2014-06-13
        • 2012-02-11
        • 2017-06-16
        • 2012-02-20
        • 2018-08-06
        • 2015-09-12
        • 1970-01-01
        • 2012-01-22
        相关资源
        最近更新 更多