主函数
()
| 1107 | |
| 1108 | # ==================== 主程序 ==================== |
| 1109 | def main(): |
| 1110 | """主函数""" |
| 1111 | config = Config() |
| 1112 | |
| 1113 | env_value = os.getenv(config.ENV_NAME) |
| 1114 | if not env_value: |
| 1115 | print(f"❌ 未找到环境变量 {config.ENV_NAME},请检查配置") |
| 1116 | return |
| 1117 | |
| 1118 | account_urls = [url.strip() for url in env_value.split('&') if url.strip()] |
| 1119 | if not account_urls: |
| 1120 | print(f"❌ 环境变量 {config.ENV_NAME} 为空或格式错误") |
| 1121 | return |
| 1122 | |
| 1123 | # 随机打乱账号顺序 |
| 1124 | random.shuffle(account_urls) |
| 1125 | print(f"🔀 已随机打乱账号执行顺序") |
| 1126 | |
| 1127 | print("=" * 50) |
| 1128 | print(f"🎉 {config.APP_NAME} v{config.VERSION}") |
| 1129 | print(f"👨💻 作者: 爱学习的呆子") |
| 1130 | print(f"📱 共获取到 {len(account_urls)} 个账号") |
| 1131 | print(f"⚙️ 并发数量: {CONCURRENT_NUM}") |
| 1132 | print(f"⏰ 执行时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") |
| 1133 | print("=" * 50) |
| 1134 | |
| 1135 | # 收集所有账号的统计信息 |
| 1136 | all_results = [] |
| 1137 | |
| 1138 | if CONCURRENT_NUM <= 1: |
| 1139 | # 串行执行模式 |
| 1140 | print("🔄 使用串行模式执行...") |
| 1141 | for index, account_url in enumerate(account_urls): |
| 1142 | account = AccountManager(account_url, index, config) |
| 1143 | result = account.run() |
| 1144 | result['index'] = index |
| 1145 | all_results.append(result) |
| 1146 | |
| 1147 | if index < len(account_urls) - 1: |
| 1148 | print("=" * 50) |
| 1149 | print(f"⏳ 等待 2 秒后执行下一个账号...") |
| 1150 | time.sleep(2) |
| 1151 | else: |
| 1152 | # 并发执行模式 |
| 1153 | print(f"🔄 使用并发模式执行,并发数: {CONCURRENT_NUM}") |
| 1154 | |
| 1155 | # 使用线程池执行 |
| 1156 | with ThreadPoolExecutor(max_workers=CONCURRENT_NUM) as executor: |
| 1157 | # 提交所有任务 |
| 1158 | future_to_index = { |
| 1159 | executor.submit(run_single_account, account_url, index, config): index |
| 1160 | for index, account_url in enumerate(account_urls) |
| 1161 | } |
| 1162 | |
| 1163 | # 等待任务完成 |
| 1164 | for future in as_completed(future_to_index): |
| 1165 | result = future.result() |
| 1166 | all_results.append(result) |