TaskController.py
2.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# coding=utf-8
#author: 4N
#createtime: 2021/12/2
#email: nheweijun@sina.com
from app.modules.data.models import Task
from app.util.component.StructurePrint import StructurePrint
import configure
import time
from app.util.component.PGUtil import PGUtil
class TaskController:
'''
此类是面向切面的类,控制各种任务是否可以进入执行状态
'''
@classmethod
def pass_check(cls,sys_session,task_guid):
# 任务类型
# 1:入库任务
# 2:抽稀任务
# 3:数据库刷新任务
# 4:数据下载任务
# 5:影像金字塔任务
task = sys_session.query(Task).filter_by(guid=task_guid).one_or_none()
check = True
if task.task_type==1:
#控制正在运行的任务数量
running_count = sys_session.query(Task).filter(Task.state == 2).filter(Task.task_type == 1).count()
first_task = sys_session.query(Task).filter(Task.state == 0).filter(Task.task_type == 1).order_by(Task.create_time).first()
if (running_count >= configure.entry_data_thread) or (not first_task.guid.__eq__(task_guid)):
StructurePrint().print("等待入库")
check = False
if task.task_type==2:
running_count = sys_session.query(Task).filter(Task.state == 2).filter(Task.task_type == 2).count()
first_task = sys_session.query(Task).filter(Task.state == 0).filter(Task.task_type == 2).order_by(Task.create_time).first()
if (running_count >= configure.entry_data_thread) or (not first_task.guid.__eq__(task_guid)):
StructurePrint().print("等待精化")
check = False
if task.task_type==3:
pass
if task.task_type==4:
pass
if task.task_type==5:
pass
return check
@classmethod
def wait(cls,task_guid):
sys_session= PGUtil.get_db_session(configure.SQLALCHEMY_DATABASE_URI)
#三秒检测一次是否可以执行任务
wait_time = 0
while not cls.pass_check(sys_session,task_guid):
time.sleep(3)
wait_time += 3
if wait_time > 21600:
try:
sys_session.close()
except Exception as e:
pass
raise Exception("任务等待超时")
sys_session.close()