sync_game_data/main.py
2020-10-20 22:01:16 +08:00

68 lines
2.2 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 = []
df = get_server_list()
server_df = df['server_df']
game_df = df['game_df']
# 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():
try:
serverid_set = set(game_df.get_group(game_name)['serverid'].unique())
except:
serverid_set = set()
task = asyncio.create_task(LoadPayData(pay_db_conf=pay_db_conf,
gm_db_pool=gm_db_pool,
game_name=game_name,
serverid_set=serverid_set
).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}')