|
@@ -1,4 +1,4 @@
|
|
|
-import threading
|
|
|
+# import threading
|
|
|
from datetime import datetime
|
|
|
|
|
|
import schedule
|
|
@@ -15,6 +15,7 @@ from stores.mysql_data_store import MysqlDataStore
|
|
|
|
|
|
class JobRunner:
|
|
|
|
|
|
+ _data_collector = None
|
|
|
store = MysqlDataStore() # 复用 store 对象
|
|
|
|
|
|
def run_job(self, is_run_now=True):
|
|
@@ -54,7 +55,9 @@ class JobRunner:
|
|
|
utils.get_logger().info(
|
|
|
f"每月{str(self._get_current_month_report_day()).rjust(2,"0")}日 {time} 执行 发送当月报告 任务"
|
|
|
)
|
|
|
- schedule.every().day.at(time).do(self._send_prev_month_report_job)
|
|
|
+ schedule.every().day.at(time).do(
|
|
|
+ self._send_current_month_report_job
|
|
|
+ )
|
|
|
|
|
|
if utils.get_config_int("job.send_prev_month_report_day") > 0:
|
|
|
report_time = utils.get_config_value("job.send_prev_month_report_time")
|
|
@@ -95,25 +98,33 @@ class JobRunner:
|
|
|
utils.get_logger().info("定时配置更新,重启任务")
|
|
|
self.run_job(False)
|
|
|
|
|
|
- def _collect_process_job(self):
|
|
|
- threading.Thread(target=self._collect_process).start()
|
|
|
+ def stop_job(self):
|
|
|
+ schedule.clear()
|
|
|
+ self._stop_data_collector()
|
|
|
+
|
|
|
+ def _stop_data_collector(self):
|
|
|
+ if self._data_collector:
|
|
|
+ self._data_collector.close()
|
|
|
|
|
|
- def _collect_process(self):
|
|
|
+ # def _collect_process_job(self):
|
|
|
+ # threading.Thread(target=self._collect_process).start()
|
|
|
+
|
|
|
+ def _collect_process_job(self):
|
|
|
try:
|
|
|
utils.get_logger().info("开始执行 数据采集处理 任务")
|
|
|
url_setting = UrlSetting()
|
|
|
for url_setting in url_setting.fetch_all():
|
|
|
- data_collector = None
|
|
|
+ self._data_collector = None
|
|
|
try:
|
|
|
utils.get_logger().info(f"开始采集: {url_setting.url}")
|
|
|
- data_collector = DataCollector(
|
|
|
+ self._data_collector = DataCollector(
|
|
|
url_setting.adapter_type,
|
|
|
url_setting.url,
|
|
|
url_setting.username,
|
|
|
url_setting.password,
|
|
|
self.store,
|
|
|
)
|
|
|
- data_collector.collect(url_setting.keywords)
|
|
|
+ self._data_collector.collect(url_setting.keywords)
|
|
|
utils.get_logger().info(f"采集完成: {url_setting.url}")
|
|
|
except Exception as e:
|
|
|
self._send_error_email(
|
|
@@ -122,8 +133,7 @@ class JobRunner:
|
|
|
)
|
|
|
utils.get_logger().error(f"采集发生异常: {e}")
|
|
|
finally:
|
|
|
- if data_collector:
|
|
|
- data_collector.close()
|
|
|
+ self._stop_data_collector()
|
|
|
|
|
|
try:
|
|
|
utils.get_logger().info(f"开始AI处理: {url_setting.url}")
|
|
@@ -140,10 +150,10 @@ class JobRunner:
|
|
|
except Exception as e:
|
|
|
utils.get_logger().error(f"数据采集处理 任务执行失败: {e}")
|
|
|
|
|
|
- def _process_job(self):
|
|
|
- threading.Thread(target=self._process).start()
|
|
|
+ # def _process_job(self):
|
|
|
+ # threading.Thread(target=self._process).start()
|
|
|
|
|
|
- def _process(self):
|
|
|
+ def _process_job(self):
|
|
|
try:
|
|
|
utils.get_logger().info("开始执行 AI处理数据 任务")
|
|
|
data_process = DataProcess(self.store)
|
|
@@ -218,7 +228,7 @@ class JobRunner:
|
|
|
"""验证并格式化时间字符串"""
|
|
|
if not time_str:
|
|
|
return default_time
|
|
|
- time_str = time_str.strip().replace(",", ",")
|
|
|
+ time_str = str(time_str).strip().replace(",", ",")
|
|
|
# 分割字符串为列表
|
|
|
items = [item.strip().strip("'").strip('"') for item in time_str.split(",")]
|
|
|
|