我有一个需要扩展的discord bot。机器人的主要功能是从第三方网站获取数据,并保存一个包含成员信息的数据库。这两个操作相当耗时,我希望每个操作都有一个单独的工人/流程。
我的限制:
- 第三方网站每分钟有GET的限制
- 同一公会不能同时访问数据库
我一直在网上研究实现这一点的最佳方法,但我发现了几种实现这种解决方案的库/方法。我有哪些选择,它们的长处和短处?
由于来自主机的请求量有限制,我会首先尝试运行一个同步程序,并在分钟结束前检查是否达到了限制。如果是这样,那么就没有必要同时运行其他工人。但是,如果没有达到限制,那么我建议您同时使用asyncio
和aiohttp
来异步获取请求。关于如何开始使用这些库,有很多信息。
另一种选择是使用好的旧threading
模块(或者concurrent.futures
用于更高级别的用例(。这两种选择各有利弊。我要做的是首先尝试concurrent.futures
(即ThreadPoolExecutor
上下文管理器(模块,因为您只需要添加一行代码。如果它不能完成任务,请记住:如果必须,请使用asyncio
,如果必须,则使用threading
。这两个模块都很容易使用和理解,但它们确实需要遵循通用结构,这意味着您很可能需要更改代码。