Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查询任务状态-芹菜&;雷迪斯_Python_Redis_Celery_Celery Task - Fatal编程技术网

Python 查询任务状态-芹菜&;雷迪斯

Python 查询任务状态-芹菜&;雷迪斯,python,redis,celery,celery-task,Python,Redis,Celery,Celery Task,好吧,我有一个相对简单的问题,我想,这就像我在用它撞砖墙一样。我有一个flask应用程序和一个网页,允许您使用芹菜和redis(broker)在服务器端运行大量脚本 我想做的就是当我启动一个任务时给它一个名称/id(任务将被描绘成客户端的一个按钮),即 @app.route(“/start\u upgrade/”) def start_升级(任务名称): 示例_task.delay(1,2,task_name=task_name) 然后在任务开始后,我想看看任务是否在单独的请求中运行/等待/完

好吧,我有一个相对简单的问题,我想,这就像我在用它撞砖墙一样。我有一个flask应用程序和一个网页,允许您使用芹菜和redis(broker)在服务器端运行大量脚本

我想做的就是当我启动一个任务时给它一个名称/id(任务将被描绘成客户端的一个按钮),即

@app.route(“/start\u upgrade/”)
def start_升级(任务名称):
示例_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
@app.route('/check\u upgrade\u status/'))
def获取任务状态(任务名称):
任务=芹菜。按任务名称(任务名称)获取任务
task\u state=task.state
返回任务状态伪代码
但我在文件里找不到类似的东西。我对芹菜很陌生,不过仅供参考,所以我想我什么都不知道。另外,更明显的是,我需要能够从python查询任务状态,请不要使用CLI命令


也欢迎使用任何其他方法来实现我查询队列的目标。

当您使用
延迟
应用异步
启动任务时,将创建一个对象
异步结果
,并包含任务的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

看一看结果文档,你应该会在那里得到你需要的东西:

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

我与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)
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)