68 lines
2.2 KiB
Python
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}秒')
|