Python多处理:工作程序池与进程

时间:2020-08-15 17:01:07

标签: python discord.py

我有一个不平衡的机器人,需要扩展。 该机器人的主要功能是从第三方网站获取数据,并保留一个包含会员信息的数据库。 这两个操作非常耗时,我希望每个操作都有一个单独的工作程序/进程。

我的限制:

  • 第三方网站每分钟的GET数量是有限的。
  • 同一行会不能同时访问数据库。

我一直在在线研究实现此目的的最佳方法,但是我进入了几种库/方式来实现这种解决方案。我有哪些选择以及它们的优缺点?

1 个答案:

答案 0 :(得分:0)

由于来自主机的请求数量受到限制,因此我将首先尝试运行一个同步程序,并在分钟结束之前检查是否达到了限制。如果这样做的话,就不需要同时运行其他工人。但是,如果没有达到限制,那么我建议您同时使用asyncioaiohttp来异步获取请求。关于如何开始使用这些库,有大量信息。

另一种选择是使用较旧的threading模块(或在更高级别的用例中使用concurrent.futures)。两种选择都有其优缺点。我要做的是首先尝试使用concurrent.futures(即ThreadPoolExecutor上下文管理器)模块,因为您只需添加一行代码即可。如果无法完成任务,请记住:如果需要,请使用asyncio,如果必须,请使用threading。这两个模块都易于使用和理解,但是它们确实需要遵循通用的结构,这意味着您很可能必须更改代码。