Django+Apscheduler 开发定时任务模块
目录
本文章要实现的是Django+Apscheduler 开发定时任务模块,并使用uwsgi+nginx模式部署,
且能避免多进程下任务重复执行,且能够页面动态操作任务;
一、回顾
上一节我们已经创建好了django项目,请前往查看 【Django+Apscheduler 开发定时任务模块】【一】
二、安装Apscheduler
1、安装Apscheduler很简单,只需一条命令:
pip install apscheduler
2、使用Apscheduler,网上有详细介绍,官网也有,这里不多说: 官网 翻译版
三、编写存储定时任务的model
1、新建一个app,这里就简单的叫app
python manage.py startapp app
2、在settings.py中添加app模块
INSTALLED_APPS = [
'simpleui',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app.apps.AppConfig',
]
3、在app文件夹下的models.py中添加名为job_list的model,直接上代码:
class job_list(models.Model):
decpet = models.CharField('描述', max_length=255)
job_name = models.CharField('任务名称', max_length=25)
trigger_name = models.CharField('触发器', max_length=25)
type_choices = (('date', 'date'), ('cron', 'cron'))
type_content = '''调度类型 对应 参数(执行频率) 例:<br/>
1、date:2019年8月30日 凌晨一点 执行任务<br/>参数值:2019-8-30 01:00:00 <br/>
2、cron:每天 凌晨两点 执行任务 (秒 分 时 日 月 星期 年)<br/>参数值:0 0 2 * * * *'''
action_type = models.CharField('调度类型', choices=type_choices, max_length=25, default='cron')
gender_choices = ((0, '停止'), (1, '启动'),)
job_state = models.IntegerField('任务状态', choices=gender_choices, default=0)
job_rate = models.CharField('执行频率', help_text=type_content, max_length=50)
time = models.IntegerField('执行次数', default=0)
def __str__(self):
return self.decpet
class Meta:
verbose_name_plural = '定时任务'
4、在app文件夹下的admin.py中注册JobListAdmin,看代码:
@admin.register(job_list)
class JOBLISTAdmin(admin.ModelAdmin):
list_display = ('id', 'job_name', 'decpet', 'trigger_name', 'job_state', 'action_type', 'job_rate')
list_display_links = ('id', 'job_name')
list_filter = ('job_state',)
list_editable = ('action_type', 'job_rate',)
list_per_page = 20
list_max_show_all = 7
ordering = ('-job_state', 'id',)
四、展示
ok,这一节就先到这里,我们已经创建好了定时任务模块,并且页面展示也已经完成;附上截图,里面会有下节要写的内容,也是最后一节
2022-04-17
|