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



我有一个需要扩展的discord bot。机器人的主要功能是从第三方网站获取数据,并保存一个包含成员信息的数据库。这两个操作相当耗时,我希望每个操作都有一个单独的工人/流程。

我的限制:

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

我一直在网上研究实现这一点的最佳方法,但我发现了几种实现这种解决方案的库/方法。我有哪些选择,它们的长处和短处?

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

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

最新更新