import asyncio import time import aiomysql from motor import motor_asyncio from loguru import logger from config import settings from update_data import LoadUserData, LoadPayData from utils import get_server_list loop = asyncio.get_event_loop() async def main(): tasks = [] server_df = get_server_list() # gm_db pool gm_db_pool = await aiomysql.create_pool(**settings.GAME_MANA_MYSQLDB, maxsize=100, autocommit=True) for server, data in server_df: # 这一组的 mongodb 相同 建立一次连接 game_name = server[0] # 如果没配置订单数据库 就不处理这个游戏 if game_name not in settings.PAY_DB: continue mongo_client = motor_asyncio.AsyncIOMotorClient( f'mongodb://{str(server[3])}:{str(server[4])}@{str(server[1])}:{int(server[2])}/?authSource=admin&readPreference=primary', serverSelectionTimeoutMS=settings.TIMEOUT_MS, socketTimeoutMS=settings.TIMEOUT_MS ) s_db_df = data[['db', 'serverid']] task = asyncio.create_task(LoadUserData(mongo_client=mongo_client, gm_db_pool=gm_db_pool, game_name=game_name, s_db_df=s_db_df ).run()) tasks.append(task) # 更新支付信息 for game_name, pay_db_conf in settings.PAY_DB.items(): task = asyncio.create_task(LoadPayData(pay_db_conf=pay_db_conf, gm_db_pool=gm_db_pool, game_name=game_name, ).run()) tasks.append(task) await asyncio.gather(*tasks) gm_db_pool.close() await gm_db_pool.wait_closed() if __name__ == '__main__': st = time.time() loop.run_until_complete(main()) logger.info(f'共耗时{time.time() - st}秒')