sync_game_data/main.py
2020-09-12 18:03:05 +08:00

61 lines
2.0 KiB
Python

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}')