如何获取Celery任务的执行结果?

本篇是Celery+django如何显示任务的执行进度条兄弟篇,上篇限于篇幅,留了个尾巴没说,就是后台celery执行的任务结果如何我们获取,最终成没成功,执行的结果是什么,不成功的话有什么报错,这些信息对我们还是非常有用的,因为这关乎任务要不要再次执行的问题,且不说显示不显示进度条,最终完成了总要给给交代对吧,关于每个任务执行的结果,celery其实已经为我们做好了,我们只需要使用就好,就像上一篇我说的,在python的世界,一切都变得easy了,那这篇就来说一下如何获取每个任务的执行结果和最终是否完成的状态。

 要获取每个任务的执行结果,其实就是配置下celery的参数就可以,我们拿redis来说,redis既可以做为broker,也可以做为任务执行结果存储功能,在我们settings.py文件中加入:

CELERY_RESULT_BACKEND = 'redis://106.13.57.10:6379'

就这么简单的一行就可以了,这样每个任务的执行结果都会保存到redis里,保存的形式是以任务id做为key, value就是任务执行的结果和状态,在这里我要说一下,这里是展示的最终状态,也就是说任务执行完毕,这里才有这个key,没执行完的任务是没有key的,那要怎么获取任务信息呢,一般来说由前端定期发送一个ajax请求 ,如果请求有值就说明任务已经完成,把请求的数据解析显示到前端页面上即可,如果没有值那就说明还没执行完,间隔几秒后再执行。

 以上就是采用redis来存储结果的方式,但有时候我们就想存储到数据库中,通过orm方式来获取最终的数据,这个也是可以的,那下面我们就来说如何把结果存储到数据库中,其实方式大同小异,思路基本一样,不过我们要先安装一个第三方包:

pip install django-celery-results

安装完毕在settings.py文件,INSTALLED_APPS中加入:

'django_celery_results',

然后数据库迁移:

python manage.py makemigrationspython manage.py migrate

运行完会新建一个表:

django_celery_results_taskresult

因为这次是存储到db中,所以上面的配置要改一下:

CELERY_RESULT_BACKEND = 'django-db'

指定后端是django-db, 这样就配置完了,再次运行celery任务,结果就会存到数据库中了,但内容是一样的,类似如下:

如何获取Celery任务的执行结果?

图截取了一部分,字段内容还有很多,还有执行时间、支持子任务等等。

以上就是所有内容了,欢迎大家留言沟通。


上一篇:Celery 异步任务队列高级用法 以及 3种调用任务的方法详解


下一篇:adminset解析