概述
网上关于django-q的内容很少,连配置文档都没有,这里写一篇入门文档,一起学习。我个人感觉,django-q简直吊打celery。在定时任务上面,设置非常简单,也不会遇到一些奇奇怪怪的问题。
注意:这里面对要调用的函数,使用的是字符串的方式,最开始我对这个很疑惑,不过后来才发现这样更方便,彻底将要执行的任务函数和这个任务机制解绑,不像celery,不注册就没法使用。
环境搭建
注意:如果使用python3.6,请不要使用django 3.x,要用django2.x,
建议使用python3.7
另,我再windows上没有成功运行,原因未知。
安装
使用pip进行安装
pip install django-q
在项目settings.py中将django_q添加到INSTALLED_APPS:
INSTALLED_APPS =(
# 其他应用
'django_q',
)
运行Django迁移以创建数据库表:
python manage.py migrate
组态
选择一个消息代理并配置。
这里以redis为例:
安装redis需要的环境:
sudo apt install redis-server
pip3 install redis
pip3 install django-redis
注意:这里有一个问题,redis不支持消息回执。如果对你的需求有影响建议更换消息代理。
配置settings.py文件
# settings.py示例
Q_CLUSTER = {
'name': 'myproject',#项目名称
'workers': 4, #worker数。默认为当前主机的CPU计数,
'recycle': 500, # worker在回收之前要处理的任务数。有助于定期释放内存资源。默认为500。
'timeout': 60, # 任务超时设置,如果是爬虫任务建议设置长一些
'compress': True, # 数据压缩
'save_limit': 250, # 限制保存到Django的成功任务的数量。0为无限,-1则不会保存
'queue_limit': 500, # 排队的任务数量,默认为workers**2。
'cpu_affinity': 1, # 设置每个工作人员可以使用的处理器数量。根据经验; cpu_affinity 1支持重复的短期运行任务,而没有亲和力则有利于长时间运行的任务。
'label': 'Django Q', # 用于Django Admin页面的标签。默认为'Django Q',之后我会根据源码做一个中文版的django-admin页面。如果有需求请私信我
'redis': {#如果配置了redis缓存,可以使用django的设置,请参考官方文档。
'host': '127.0.0.1',
'port': 6379,
'db': 0, }
}
启动
先启动qcluster
python manage.py qcluster
再启动django,
如果要监视集群:
$ python manage.py qmonitor
使用以下方法检查总体统计信息:
python manage.py qinfo
如果到这里能够正常运行,恭喜你,已经完成一半了。
通过页面的方式添加任务
tasks.py
在app下创建tasks.py,该文件主要是存储需要调用的一些方法。举例如下:
# tasks.py
def add(a,b)
return a+b
假定这个app名字叫dj_q_test,那么,在页面可以这么创建定时任务:
进去之后,这么输入参数:
设置运行时间:
点击保存之后,在这里查看就ok:
如果想要在代码里面执行,同样很简单。