main.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import os
  2. import sys
  3. import time
  4. from model.custom_struct import GameConfig
  5. from model.global_manager import GM
  6. from model.helper import MyHelper
  7. from net.task_api import task_api
  8. from task.task import Task
  9. from tools.log import logger
  10. from tools.thread_pool import MyThreadPoolExecutor
  11. from tools.utils import Utils
  12. def main():
  13. try:
  14. # 初始化全局管理
  15. GM.init()
  16. # 创建线程池
  17. executor = MyThreadPoolExecutor(max_workers=GM.device_info.window_nums)
  18. timer = Utils.Timer()
  19. while GM.get_global_control():
  20. if timer.timer('heartbeat', 60):
  21. result,message = task_api.heartbeat(GM.device_info.officer)
  22. logger.info(f'心跳:{message}')
  23. idle_worker_count = executor.get_idle_worker_count()
  24. # 只有当有空闲工作线程时才继续
  25. if idle_worker_count > 0:
  26. window_list = task_api.get_window_list()
  27. for window in window_list:
  28. window_id = window.window_id
  29. # 只处理状态为 0 的窗口
  30. if GM.get_window_status(window_id) == 0:
  31. # 检查更新
  32. GM.updater.check_updates(GM.device_info, window.game_list)
  33. # 检查是否有任务需要执行
  34. for game in window.game_list:
  35. game_info = GameConfig.dict_to_GameConfig(game)
  36. if GM.updater.get_is_updating(game_info.task_id): # 检查是否正在更新
  37. continue
  38. if not game_info.is_execute:
  39. continue
  40. # 取账号信息
  41. result, account_info = task_api.get_account(game_info.task_id,GM.device_info.only_new,GM.device_info.only_retained)
  42. logger.info(f'[窗口-{window_id}]{game_info.task_id}-获取账号:{account_info}',window_id)
  43. if result:
  44. task_api.up_log_profession(account_info.account, game_info.task_id, '拉取账号', '成功')
  45. helper = MyHelper(window_id, game_info, account_info)
  46. # 设置窗口状态为正在执行
  47. GM.set_window_status(window_id, 1)
  48. # 提交任务给线程池异步执行
  49. executor.submit(Task(helper).run)
  50. break # 处理完一个窗口任务后,跳出当前循环,避免重复提交任务
  51. time.sleep(3)
  52. time.sleep(10) # 等待一定时间后重新检查
  53. except Exception as e:
  54. logger.exception(f'主线程异常:{e}')
  55. if __name__ == '__main__':
  56. if Utils.is_admin():
  57. main()
  58. sys.exit()
  59. else:
  60. Utils.run_as_admin()