Django与Celery是基于Python进行Web后端开发的核心搭配,在运营开发(即面向企业内部)的场景中非常常见。
下面是基于Django的Celery异步任务和定时任务的实战教程,大家觉得有用的话点个赞/在看吧!
配置celery主要有几点:
我们将 celery 实例的 broker 和 backend 都设为了redis.
其中 broker 的意思是“经纪人”,像股票经纪人一样,是用于促成“交易”的,Celery中它的职责就是给 worker 推送任务。
而backend的职责是存放执行信息和结果,这些数据需要被持久化存于数据库。但为了简化问题,我们将其与broker一样放置于redis当中。
因为Celery会统一从每个app下面的tasks里面监听任务。
看一下tasks内部的任务如何写:
任务的目标是延迟3秒后,返回一个语句。
这个是非常关键的一点,如何让django在启动的时候,也把celery给启动了呢?
答案是在项目的init文件内,导入celery的app
为了能够触发该异步任务,我们接下来配置一些常规文件,views和url,首先是views函数:
然后是url:
path('test_c', test_c, name='test_c'),
首先,运行django项目
python manage.py runserver
这样,django项目和celery的app就被一起启动了,但是这个时候是无法执行这个task的,因为worker没有被启动,我们可以试一下:
访问: http://127.0.0.1:8000/stats/test_c
会得到以下报错:
正确的姿势是怎么样的?需要先激活worker,然后再访问API:
celery -A NBAsite worker -l info
结果如下:
从上图下方的log信息里可以看到,在延迟了3秒后,任务启动并返回字符串,而在页面上,也可以看到成功返回。
需要注意的是,如果你修改了tasks的内容,是需要重启celery才能生效的,最简单的方法就是重启django项目。
这样,我们就完成了简单的异步任务的配置和使用。
在异步任务中,我们只用到了worker,而在定时任务中,还要用到celery的beat调度器。
首先来看下如何配置定时任务,或者说如何配置这个调度器。
还是在celery.py里面进行配置:
重点是增加了app.conf.beat_schedule这个定时任务配置,指定了 stats 文件夹下 tasks.py 中的auto_sc函数,定时于20:47分执行。
增加一个对应要做定时任务的task
@shared_task
def auto_sc():
print ('sc test?')
return 'halo'
命令的话可以将激活worker和激活beat合并在一起,如下:
celery -A NBAsite worker -B -l info
不过,windows不被允许这么使用,因此在windows环境下,你需要同时打开worker和beater:
celery -A NBAsite worker -l info
celery -A NBAsite beat -l info
看上图下方的log可知定时任务被成功执行。至此便完成了定时任务的配置与执行。
全部0条评论
快来发表一下你的评论吧 !