这篇文章主要为大家展示了“如何使用celery执行Django串行异步任务”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用celery执行Django串行异步任务”这篇文章吧。
前言
Django项目有一个耗时较长的update过程,希望在接到请求运行update过程的时候,Django应用仍能正常处理其他的请求,并且update过程要求不能并行,也不能漏掉任何一个请求
使用celery的solo模式解决
安装redis
https://github.com/microsoftarchive/redis/releases
下载.msi文件安装,会直接将redis注册为windows服务
安装celery与redis依赖
pip install celery pip indatll redis
一个celery应用
# celery_test.py import time from celery import Celery app = Celery('tasks', broker='redis://127.0.0.1:6379/0') @app.task def add(x, y): time.sleep(5) return x + y
启动celery服务
celery -A celery_test.app worker --pool=solo -l info
查看完整的命令行参数列表
celery worker --help
对celery启动命令的解释
'-A' 是一个全局配置,定义了APP的位置
'--pool' 是POOL的配置,默认是prefork(并发),选择solo之后,发送的任务不会被并发执行,在worker执行任务过程中,再次发送给worker的任务会排队,执行完一个再执行另一个
'-l' 是WORKER的配置,定义了log级别
调用任务
>>> from celery_test import add >>> add.delay(4,4)
因为启动了solo模式,因此,可以看到在一个add没有执行完前,即使再次发送执行add的任务,celery worker也会等到前一个任务执行完才去执行下一个
与Django结合
在装载celery应用前先setup django
import time import os import django os.environ.setdefault("DJANGO_SETTINGS_MODULE", "demo.settings") django.setup() from celery import Celery from django_app.update import update app = Celery('tasks', broker='redis://127.0.0.1:6379/0', backend='redis://127.0.0.1:6379/0') @app.task def update_task(): update()
然后在views中调用task就可以了。
from celery_test import update_task def update_api(request): if request.method == "GET": update_task.delay() return HttpResponse(status=status.HTTP_200_OK)
执行过程中,程序的print信息会作为celery warning,报错信息会作为celery error
日志
在启动应用的时候指定日志文件路径
-f log_path
不设置这个参数的时候,日志默认输出到控制台
以上是“如何使用celery执行Django串行异步任务”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。