DJangoQ易用版(开启django的多线程)

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 可以管理当前的 定时任务,删除定时任务,此时会立即停止执行.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值