优化自动任务

This commit is contained in:
ngfchl
2022-10-11 09:31:53 +08:00
parent 419e326977
commit 3e198854cf
2 changed files with 27 additions and 19 deletions

View File

@@ -7,6 +7,7 @@ from django.http import JsonResponse
from simpleui.admin import AjaxAdmin
from auto_pt.models import Task, TaskJob, Notify, OCR
from auto_pt.views import logger
from pt_site import views as tasks
from pt_site.views import pt_spider
from ptools.base import Trigger
@@ -15,7 +16,7 @@ from ptools.base import Trigger
# Register your models here.
@admin.register(Task)
# @admin.register(Task)
class TaskAdmin(admin.ModelAdmin): # instead of ModelAdmin
# 显示字段
list_display = (
@@ -59,24 +60,26 @@ class TaskJobAdmin(admin.ModelAdmin): # instead of ModelAdmin
)
search_fields = ('task', 'job_id')
list_filter = ('task', 'trigger', 'task_exec',)
autocomplete_fields = ('task',)
# autocomplete_fields = ('task',)
list_editable = ('task_exec',)
def save_model(self, request, obj: TaskJob, form, change):
obj.save()
# 从字符串获取function
func = getattr(tasks, obj.task.name)
# 检查任务是否存在,已存在就删除任务
exist_job = tasks.scheduler.get_job(obj.job_id)
if exist_job:
print(exist_job.id)
logger.info(exist_job.id + '任务已存在,将移除后重新添加!')
exist_job.remove()
print(tasks.scheduler.get_jobs())
# 如果任务未启用,只保存,不入库,已存在任务就删除
logger.info(exist_job.id + '任务移除成功!')
if not obj.task_exec:
obj.save()
messages.success(request, obj.job_id + ' 保存成功!如需执行任务,请勾选开启任务!')
logger.info(exist_job.id + '任务未开启,将只入库不执行!')
super().save_model(request, obj, form, change)
else:
try:
# new_job = None
# 添加任务
logger.info(exist_job.id + ' 任务添加中!')
if obj.trigger == Trigger.cron:
new_job = tasks.scheduler.add_job(func,
trigger=CronTrigger.from_crontab(obj.expression_time),
@@ -97,15 +100,20 @@ class TaskJobAdmin(admin.ModelAdmin): # instead of ModelAdmin
misfire_grace_time=obj.misfire_grace_time,
jitter=obj.jitter, )
print(new_job.pending)
info = ' 添加成功!' if not exist_job else '更新成功!'
pt_spider.send_text('计划任务:' + new_job.id + info)
messages.success(request, new_job.id + info)
obj.save()
# print(new_job.pending)
# pt_spider.send_text('计划任务:' + new_job.id + info)
# messages.success(request, new_job.id + info)
# 如果任务未启用,只保存,不入库,已存在任务就删除
logger.info(exist_job.id + ' 任务添加成功!')
logger.info(obj.job_id + ' 任务状态是否暂停:' + str(new_job.pending))
logger.info('当前存在的所有自动任务:')
logger.info(tasks.scheduler.get_jobs())
messages.success(request,
obj.job_id + ' 保存成功!' + ('如需执行任务,请勾选开启任务!' if obj.task_exec else ''))
except Exception as e:
obj.task_exec = False
obj.save()
raise
# raise
pt_spider.send_text('计划任务:' + obj.job_id + '任务添加失败!原因:' + str(e))
messages.error(request, obj.job_id + '任务添加失败!原因:' + str(e))

View File

@@ -29,18 +29,18 @@ class TaskJob(BaseEntity):
task = models.ForeignKey(verbose_name='任务名称', to=Task, on_delete=models.CASCADE)
job_id = models.CharField(verbose_name='任务ID', max_length=16, unique=True)
trigger = models.CharField(verbose_name='任务类型', choices=Trigger.choices, default=Trigger.cron, max_length=64)
task_exec = models.BooleanField(verbose_name='开启任务', default=False)
task_exec = models.BooleanField(verbose_name='开启任务', default=True)
replace_existing = models.BooleanField(verbose_name='覆盖任务', default=True,
help_text='不设置此项重启项目后会报任务id已存在的错误, 设置此参数后会对已有的任务进行覆盖')
expression_time = models.CharField(verbose_name='时间表达式',
help_text='在间隔任务表示间隔时长使用数字单位corn任务中为corn表达式0 15 8 ? * * 2022”',
help_text='在间隔任务表示间隔时长使用数字单位corn任务中为五位corn表达式“15 8 * * 2022”',
max_length=64)
start_date = models.DateTimeField(verbose_name='任务开始时间', null=True, blank=True)
end_date = models.DateTimeField(verbose_name='任务结束时间', null=True, blank=True)
misfire_grace_time = models.IntegerField(verbose_name='任务运行时间', default=120,
misfire_grace_time = models.IntegerField(verbose_name='任务运行时间', default=600,
help_text='强制执行结束的时间, 为避免撞车导致任务丢失, 没执行完就别执行了')
jitter = models.IntegerField(verbose_name='时间浮动参数', default=120,
help_text='强制执行结束的时间, 为避免撞车导致任务丢失, 没执行完就别执行了')
jitter = models.IntegerField(verbose_name='时间浮动参数', default=1200,
help_text='增强时间随机性')
args = models.CharField(verbose_name='任务参数',
help_text='执行代码所需要的参数。',
max_length=128, null=True, blank=True)