|
@@ -36,8 +36,8 @@ class TaskRunner:
|
|
|
|
|
|
# 如果项目没有任务在运行,但并发项目数已满且该项目不在运行集合中
|
|
# 如果项目没有任务在运行,但并发项目数已满且该项目不在运行集合中
|
|
if (
|
|
if (
|
|
- len(cls._running_projects) >= cls._max_concurrent_projects
|
|
|
|
- and project_id not in cls._running_projects
|
|
|
|
|
|
+ len(cls._running_projects) >= cls._max_concurrent_projects
|
|
|
|
+ and project_id not in cls._running_projects
|
|
):
|
|
):
|
|
cls._add_task_to_wait_list(
|
|
cls._add_task_to_wait_list(
|
|
task,
|
|
task,
|
|
@@ -103,7 +103,7 @@ class TaskRunner:
|
|
for project_id in list(cls._task_wait_list.keys()):
|
|
for project_id in list(cls._task_wait_list.keys()):
|
|
# 只有当项目没有任务在运行且并发项目数未满时才执行
|
|
# 只有当项目没有任务在运行且并发项目数未满时才执行
|
|
if (
|
|
if (
|
|
- project_id not in cls._is_running or not cls._is_running[project_id]
|
|
|
|
|
|
+ project_id not in cls._is_running or not cls._is_running[project_id]
|
|
) and len(cls._running_projects) < cls._max_concurrent_projects:
|
|
) and len(cls._running_projects) < cls._max_concurrent_projects:
|
|
cls._execute_project_tasks(project_id)
|
|
cls._execute_project_tasks(project_id)
|
|
else:
|
|
else:
|
|
@@ -124,7 +124,7 @@ class TaskRunner:
|
|
|
|
|
|
@classmethod
|
|
@classmethod
|
|
def _add_task_to_wait_list(
|
|
def _add_task_to_wait_list(
|
|
- cls, task: ProjectTaskDto, log_message: str = None
|
|
|
|
|
|
+ cls, task: ProjectTaskDto, log_message: str = None
|
|
) -> None:
|
|
) -> None:
|
|
"""将任务添加到等待队列并更新状态"""
|
|
"""将任务添加到等待队列并更新状态"""
|
|
project_id = task.project_id
|
|
project_id = task.project_id
|
|
@@ -135,7 +135,7 @@ class TaskRunner:
|
|
|
|
|
|
@classmethod
|
|
@classmethod
|
|
def _update_project_running_status(
|
|
def _update_project_running_status(
|
|
- cls, project_id: str, is_running: bool = False
|
|
|
|
|
|
+ cls, project_id: str, is_running: bool = False
|
|
) -> None:
|
|
) -> None:
|
|
"""更新项目运行状态"""
|
|
"""更新项目运行状态"""
|
|
with cls._lock:
|
|
with cls._lock:
|
|
@@ -147,9 +147,9 @@ class TaskRunner:
|
|
|
|
|
|
# 如果项目没有等待任务,从等待列表中移除
|
|
# 如果项目没有等待任务,从等待列表中移除
|
|
if (
|
|
if (
|
|
- not is_running
|
|
|
|
- and project_id in cls._task_wait_list
|
|
|
|
- and len(cls._task_wait_list[project_id]) == 0
|
|
|
|
|
|
+ not is_running
|
|
|
|
+ and project_id in cls._task_wait_list
|
|
|
|
+ and len(cls._task_wait_list[project_id]) == 0
|
|
):
|
|
):
|
|
del cls._task_wait_list[project_id]
|
|
del cls._task_wait_list[project_id]
|
|
|
|
|
|
@@ -161,8 +161,8 @@ class TaskRunner:
|
|
return False
|
|
return False
|
|
# 如果项目不在运行集合中且并发数已满,直接返回False
|
|
# 如果项目不在运行集合中且并发数已满,直接返回False
|
|
if (
|
|
if (
|
|
- project_id not in cls._running_projects
|
|
|
|
- and len(cls._running_projects) >= cls._max_concurrent_projects
|
|
|
|
|
|
+ project_id not in cls._running_projects
|
|
|
|
+ and len(cls._running_projects) >= cls._max_concurrent_projects
|
|
):
|
|
):
|
|
return False
|
|
return False
|
|
return True
|
|
return True
|
|
@@ -181,8 +181,8 @@ class TaskRunner:
|
|
try:
|
|
try:
|
|
cls._logger.debug(f"开始执行项目[{project_id}]")
|
|
cls._logger.debug(f"开始执行项目[{project_id}]")
|
|
while (
|
|
while (
|
|
- project_id in cls._task_wait_list
|
|
|
|
- and len(cls._task_wait_list[project_id]) > 0
|
|
|
|
|
|
+ project_id in cls._task_wait_list
|
|
|
|
+ and len(cls._task_wait_list[project_id]) > 0
|
|
):
|
|
):
|
|
current_task = cls._task_wait_list[project_id].pop(0)
|
|
current_task = cls._task_wait_list[project_id].pop(0)
|
|
try:
|
|
try:
|
|
@@ -224,8 +224,8 @@ class TaskRunner:
|
|
def execute_process_tasks():
|
|
def execute_process_tasks():
|
|
try:
|
|
try:
|
|
while (
|
|
while (
|
|
- project_id in cls._process_task_wait_list
|
|
|
|
- and len(cls._process_task_wait_list[project_id]) > 0
|
|
|
|
|
|
+ project_id in cls._process_task_wait_list
|
|
|
|
+ and len(cls._process_task_wait_list[project_id]) > 0
|
|
):
|
|
):
|
|
current_task = cls._process_task_wait_list[project_id].pop(0)
|
|
current_task = cls._process_task_wait_list[project_id].pop(0)
|
|
try:
|
|
try:
|