首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用来自MySQL的数据每5分钟更新一次API数据库

使用来自MySQL的数据每5分钟更新一次API数据库
EN

Stack Overflow用户
提问于 2020-07-20 00:22:11
回答 2查看 145关注 0票数 0

我正在写一个不和谐的机器人,收集用户的统计数据从游戏使用API。

我目前有一个函数,它是一个后台任务,也就是在不同的线程上。不幸的是,它让我的机器人在运行时出现了延迟,因为它意味着每5分钟做一次,这是不太理想的。

我基本上是在寻找一个解决方案,将允许我使用机器人和更新统计每5分钟。

我希望使用一些其他的解决方案,我没有任何想法,让这不让我的机器人挂起。

最烦人的是统计数据来自一个API,所以它需要做一个for循环来执行。

下面是函数:

代码语言:javascript
复制
async def update_playlists(self, platform, username):
        print("-----\nUPDATING RL RANKS DB - DO NOT SHUTDOWN")
        async with self.bot.pool.acquire() as conn:
            async with conn.cursor() as cur:
                sql = "SELECT `username`, `platform` FROM `player_ranks`"
                await cur.execute(sql)
                players = await cur.fetchall()
                for player in players:
                    ranks = []
                    username, platform = player
                    print(f"-----\n{username} ranks are being updated")
                    playlists = self.get_playlists(platform, username)
                    for gameMode in GameModes:
                        if gameMode == GameModes.CASUAL.value:
                            continue
                        try:
                            playlist = next((p for p in playlists['data'] if p['attributes']['playlistId'] == gameMode))
                            ranks += (playlist['stats']['tier']['metadata']['name'],
                                      playlist['stats']['division']['metadata']['name'],
                                      playlist['stats']['rating']['value'])

                        except StopIteration:
                            ranks += ("n/a", "n/a", "0")
                            pass
                    sql = "UPDATE player_ranks SET `Duel_Rank`=%s, `Duel_Div`=%s, `Duel_MMR`=%s, `Doubles_Rank`=%s, `Doubles_Div`=%s, `Doubles_MMR`=%s, `Solo_Standard_Rank`=%s, `Solo_Standard_Div`=%s, `Solo_Standard_MMR`=%s, `Standard_Rank`=%s, `Standard_Div`=%s, `Standard_MMR`=%s, `Hoops_Rank`=%s, `Hoops_Div`=%s, `Hoops_MMR`=%s, `Rumble_Rank`=%s, `Rumble_Div`=%s, `Rumble_MMR`=%s, `Dropshot_Rank`=%s, `Dropshot_Div`=%s, `Dropshot_MMR`=%s, `Snowday_Rank`=%s, `Snowday_Div`=%s, `Snowday_MMR`=%s WHERE `username`=%s"
                    await cur.execute(sql, (*ranks, username))
                    await conn.commit()
                    playerdata = self.get_playerinfo(platform, username)
                    wins_: int = playerdata['data']['segments'][0]['stats']['wins']['value']
                    assists_: int = playerdata['data']['segments'][0]['stats']['assists']['value']
                    goals_: int = playerdata['data']['segments'][0]['stats']['goals']['value']
                    goalShotRatio_: float = playerdata['data']['segments'][0]['stats']['goalShotRatio']['value']
                    mvps = playerdata['data']['segments'][0]['stats']['mVPs']['value']
                    saves = playerdata['data']['segments'][0]['stats']['saves']['value']
                    shots = playerdata['data']['segments'][0]['stats']['shots']['value']
                    sql = "UPDATE player_stats SET `wins`=%s, `assists`=%s, `goals`=%s, `goalshot`=%s,`mvp`=%s, `saves`=%s, `shots`=%s WHERE `username`=%s"
                    await cur.execute(sql, (wins_, assists_, goals_, goalShotRatio_, mvps, saves, shots, username))
                    await conn.commit()```
EN

回答 2

Stack Overflow用户

发布于 2020-07-20 00:26:57

而不是让机器人进行数据库更新,您可以让它将所有统计数据写入一个文件(json或纯文本),然后使用一个单独的程序,该程序每5分钟访问一次所述文件并读取数据,将其解析到数据库中并保存所有内容。如果你使用这个"DatabaseManager“,你可以为你可怜的机器人节省一些宝贵的时间和效率;)

代码语言:javascript
复制
Note: to further increase the efficiency of the DatabaseManager
you can write it in a lower level language than python such as C++ or C#
票数 0
EN

Stack Overflow用户

发布于 2020-07-20 00:36:48

如果你有大量的更新,那么在任何情况下,操作都将花费大量的时间,目前你正在“等待”所有的更新操作,所以你可以同步地完成所有这些操作。

一种解决方案是不等待,只记录结果(不确定如何在python中做到这一点)。

另一个特定于MySQL的解决方案可以是MySQL事件-使用CREATE EVENT,您可以调度存储过程的执行,它将在后台运行,并且您的机器人实际上不会有任何延迟。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62982826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档