环境:主要的库版本
django-apscheduler==0.3.0
Django==2.2
APScheduler==3.6.3
这里不能使用Django默认的sqlite数据库
注册app,数据迁移 makemigrations 、migrate
结构目录
创建一个app - ding, ding app 中views.py
from django.http import JsonResponse
from django.shortcuts import render
# Create your views here.
from django.views import View
# 此处为测试用例
class Login(View):
def post(self, request):
print(request)
# 添加异步调度任务
test_add_task('sss:ssss', '11111111')
return JsonResponse({"code": 200})
import time
import datetime
from apscheduler.schedulers.background import BackgroundScheduler
from django_apscheduler.jobstores import DjangoJobStore, register_events, register_job
scheduler = BackgroundScheduler() # 创建一个调度器对象
scheduler.add_jobstore(DjangoJobStore(), "default")
# scheduler.remove_all_jobs()
key = "teacher_lock"
def test(s):
print(s,'test____SSS')
def test_add_task(start_time, s):
# try:
ss = start_time.split(':')
print(ss,'opsssssss')
print(s, 'ssssss')
# 创建任务
tt = str(int(time.time()*10000))
scheduler.add_job(test, 'date', next_run_time=datetime.datetime.now() + datetime.timedelta(seconds=12), args=[s], id='add'+tt)
code = '200'
message = 'success'
# except Exception as e:
# code = '400'
# message = e
# print(e,'erere')
back = {
'code': code,
'message': message
}
return back
register_events(scheduler)
scheduler.start()
因为任务的id是相同的,所以在多线程的情况下,也是可以使用的
以下是使用uwsgi 开启 的多线程的情况下进行的测试