Browse Source

优化定时器

peng 1 year ago
parent
commit
e8a6775537
2 changed files with 11 additions and 5 deletions
  1. 6 2
      Controller/SensorGateway/SmartSwitchController.py
  2. 5 3
      Object/ApschedulerObject.py

+ 6 - 2
Controller/SensorGateway/SmartSwitchController.py

@@ -6,6 +6,8 @@
 """
 import datetime
 import json
+import os
+import threading
 import time
 
 from django.views import View
@@ -339,7 +341,7 @@ class SmartSwitchView(View):
                             minute = start_minute
                         else:
                             hour = '{}-{}'.format(start_hour, end_hour)
-                            minute = '*/{}'.format(minute)
+                            minute = '{}/{}'.format(start_minute, minute)
                         apscheduler_obj.create_cron_job(SmartSwitchView.send_mqtt, task_id, repeat, hour, minute,
                                                         (serial_number, topic_name, msg, task_id))
                 return response.json(0)
@@ -387,7 +389,9 @@ class SmartSwitchView(View):
         """
         result = CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
         LOGGER.info(
-            '定时发送mqtt结果:{},参数:{},{},{},{},{}'.format(result, serial_number, topic_name, msg, int(time.time()), task_id))
+            '定时发送mqtt结果:{},参数:{},{},{},{},{},线程:{},进程:{}'.format(result, serial_number, topic_name, msg,
+                                                                 int(time.time()), task_id, threading.get_ident(),
+                                                                 os.getpid()))
 
     @staticmethod
     def create_log(request_dict, response):

+ 5 - 3
Object/ApschedulerObject.py

@@ -4,14 +4,12 @@ from django_apscheduler.jobstores import DjangoJobStore
 from Ansjer.config import LOGGER
 from django_apscheduler.models import DjangoJob
 import datetime
-from apscheduler.triggers.cron import CronTrigger
 
 
 class ApschedulerObject:
     def __init__(self):
         self.scheduler = BackgroundScheduler()
         self.scheduler.add_jobstore(DjangoJobStore(), 'default')
-        self.scheduler.start()
 
     @staticmethod
     def auto_hello():  # 任务
@@ -20,13 +18,16 @@ class ApschedulerObject:
 
     def create_cron_job(self, func, task_id, day_of_week, hour, minute, args):  # 周期任务
         self.scheduler.add_job(func=func, trigger='cron', day_of_week=day_of_week, hour=hour, minute=minute,
-                               replace_existing=True, id=task_id, max_instances=1, coalesce=False, args=args)
+                               replace_existing=True, id=task_id, max_instances=1, coalesce=False, args=args,
+                               misfire_grace_time=300)
+        self.scheduler.start()
 
     def create_interval_job(self, func, task_id, minutes, start_time, end_time, args):  # 间隔任务
         self.scheduler.add_job(func=func, trigger='interval', minutes=minutes,
                                start_date=datetime.datetime.fromtimestamp(start_time),
                                end_date=datetime.datetime.fromtimestamp(end_time),
                                replace_existing=True, id=task_id, max_instances=1, coalesce=False, args=args)
+        self.scheduler.start()
 
     def create_date_job(self, func, task_id, time_stamp, args):
         """
@@ -39,6 +40,7 @@ class ApschedulerObject:
         """
         self.scheduler.add_job(func=func, trigger='date', run_date=datetime.datetime.fromtimestamp(time_stamp),
                                replace_existing=True, id=task_id, max_instances=1, coalesce=False, args=args)
+        self.scheduler.start()
 
     @staticmethod
     def del_job(task_id):  # 删除任务