import os import sys import time from model.custom_struct import GameConfig from model.global_manager import GM from model.helper import MyHelper from net.task_api import task_api from task.task import Task from tools.log import logger from tools.thread_pool import MyThreadPoolExecutor from tools.utils import Utils # 这些库都是打包需要的 import keyboard import filelock import cv2 def main(): try: # 初始化全局管理 GM.init() # 创建线程池 executor = MyThreadPoolExecutor(max_workers=GM.device_info.window_nums) timer = Utils.Timer() while GM.get_global_control(): if timer.timer('heartbeat', 60): result,message = task_api.heartbeat(GM.device_info.officer) logger.info(f'心跳:{message}') idle_worker_count = executor.get_idle_worker_count() # 只有当有空闲工作线程时才继续 if idle_worker_count > 0: window_list = task_api.get_window_list() for window in window_list: window_id = window.window_id # 只处理状态为 0 的窗口 if GM.get_window_status(window_id) == 0: # 检查更新 GM.updater.check_updates(GM.device_info, window.game_list) # 检查是否有任务需要执行 for game in window.game_list: game_info = GameConfig.dict_to_GameConfig(game) if GM.updater.get_is_updating(game_info.task_id): # 检查是否正在更新 continue if not game_info.is_execute: continue # 取账号信息 result, account_info = task_api.get_account(game_info.task_id,GM.device_info.only_new,GM.device_info.only_retained) logger.info(f'[窗口-{window_id}]{game_info.task_id}-获取账号:{account_info}',window_id) if result: task_api.up_log_profession(account_info.account, game_info.task_id, '拉取账号', '成功') helper = MyHelper(window_id, game_info, account_info) # 设置窗口状态为正在执行 GM.set_window_status(window_id, 1) # 提交任务给线程池异步执行 executor.submit(Task(helper).run) break # 处理完一个窗口任务后,跳出当前循环,避免重复提交任务 time.sleep(3) time.sleep(10) # 等待一定时间后重新检查 except Exception as e: logger.exception(f'主线程异常:{e}') if __name__ == '__main__': if Utils.is_admin(): main() sys.exit() else: Utils.run_as_admin()