有个执行shell脚本的函数,因为执行时间比较长,大概 5 分钟左右,所以我用了 celery 做异步处理,不然页面一直卡着在加载情况。
@celery_app.task def ssh_key(host,shell,action_info): #执行脚本的一些操作 views.py文件里面调用这个任务
from task_work import ssh_key abc = ssh_key.delay(info.public_ip,cmd,action_info) 好了,问题来了。 这个异步任务可以正常丢后台运行,那么我现在要获得这个异步任务的结果要怎么处理?
我试过以下一些方式,但都不行。
按照官方做法,可以通过
abc.result 获得结果 但这个的前提是 abc.state == 'SUCCESS'才行 所以我处理方式
from task_work import ssh_key abc = ssh_key.delay(info.public_ip,cmd,action_info) while abc.state != 'SUCCESS': time.sleep(1) print abc.result 这么处理结果,把异步的又转为同步的
后来想着把time.sleep()也丢到一个新的异步任务中,处理方式如下
task_work.py文件新增一个任务
@celery_app.task def result_state(task_id): print task_id print AsyncResult(task_id).state ##后面接 time.sleep()等一些操作 views.py文件里面也新增一个调用
abc = ssh_key.delay(info.public_ip,cmd,action_info) print abc.id result_state.delay(abc.id) 然而也并不行,报以下错误信息: 
如果直接在views.py里面打印 id,state 是有值
abc = ssh_key.delay(info.public_ip,cmd,action_info) print abc.id print type(abc.id) from celery.result import AsyncResult print AsyncResult(abc.id).ready() print AsyncResult(abc.id).state 
各位大神,这是为何呢
