DJangoQ(易用版)
介绍说明:
Django-Q 是一个为 Django 框架设计的轻量级任务队列和定时任务系统 。它允许开发者将耗时的任务异步执行,从而提高应用的响应速度和用户体验。Django-Q 的特点在于它的简单性和轻量级.
安装
pip install django-q
配置
settings.py
INSTALLED_APPS = (
# other apps
'django_q',
)
#djangoQ 配置
Q_CLUSTER = {
'name': 'myDjangoQ', #启动服务名
'workers': 2, #多少个workers 的数量直接影响了任务处理的并发能力
'recycle': 500,#工作进程在处理完指定数量的任务后,将自动重启自身以释放内存资源
'timeout':30, #超时
'compress': True,#是否将任务包压缩后发送到代理
'save_limit': 10, #保存成功任务结果
'queue_limit': 5, #集群中的任务数量
'cpu_affinity': 1, #单个任务使用cpu核心
'label': 'myDjangoQ_label',
'orm': 'default', # 使用 Django ORM 作为后端
}
- 此处 ‘orm’: ‘default’, 则使用了 settings 里 DATABASES 的数据库
启动
注意: 此时启动的是 DJangoQ 的服务器, 而DJango项目也必须同时启动才能正常运行.
启动DJango
启动DJangoQ
python manage.py qcluster
实例-单任务
app.views.py
from django_q.tasks import async_task ,result
def my_task():
# time.sleep(5) # 模拟耗时操作
print('app中任务执行了!')
return f"app中返回的结果"
def test_send_view(request):# 任务发出视图
#发出任务
task_id = async_task(my_task) #此时返回的task_id 正是获取结果的请求id
return HttpResponse("目前正在做djangoQ 测试...")
def test_result_view(request):# 查看任务结果视图
task_id='f3bb5855bc14464f865d0a57e3b56a0a' #此id为 async_task(my_task) 发出任务的id
task_result = result(task_id) #查看id对应任务返回的结果
return JsonResponse({'result': task_result})
- 使用 url 绑定 test_send_view 视图查看任务发出效果
- 使用 url 绑定 test_result_view 视图查看任务结果
实例-定时任务
app.views.py
from django_q.tasks import schedule,Schedule # schedule为定时任务创建对象 ,Schedule为schedule_type定时频率属性
from django_q.models import Schedule as scheduleModel #scheduleModel 为schedule 任务队列数据模型
def check_schedule(task_name='drf_test.tests.my_test' ):
#注意: task_name 必须是应用名里的文件的任务函数
#获取所有shcedule 任务
schedules = scheduleModel.objects.all()
#任务名是否在任务队列
schedule_runing =task_name in [str(schedule) for schedule in schedules]
if not schedule_runing:#不在队列,执行定时任务
schedule(task_name , schedule_type=Schedule.MINUTES)
#Schedule.MINUTES 每分钟执行
#Schedule.HOURLY 每小时执行
#Schedule.DAILY 每天执行
#... 更多登录 admin 后台的schedule 任务列表里单个任务有选项可查
print('check_schedule:'+str(schedule)+'我成功执行了')
else: #不能重复执行定时任务
print(task_name+'的schedule任务已经在执行,请勿重复执行')
- 使用 url 绑定 check_schedule 视图运行定时任务(此写法是为了确保同个函数任务只能同时运行一个)
定时任务管理
必须保证当djangoQ 第一次使用前python manage.py makemigrations
python manage.py migrate
成功
进入admin后台
-Failed tasks #执行失败, 任务队列
-Queued tasks #执行失败,待重新执行的任务队列
-Scheduled tasks #定时任务队列,正在执行定时任务
-Successful tasks #成功执行的任务,可查看任务结果
- Scheduled tasks 可以管理当前的 定时任务,删除定时任务,此时会立即停止执行.