#python #discord.py
#python #discord.py
Вопрос:
У меня есть бот discord, который мне нужно масштабировать. Основными функциями бота является извлечение данных со стороннего веб-сайта, а также ведение базы данных с информацией об участниках. Эти две операции занимают довольно много времени, и я хотел иметь отдельного работника / процесс для каждой из них.
Мои ограничения:
- На стороннем веб-сайте существует ограничение в получении в минуту.
- Невозможно получить доступ к базе данных одновременно для одной и той же гильдии.
Я проводил онлайн-исследования в поисках наилучшего способа сделать это, но я наткнулся на несколько библиотек / способов реализации такого рода решений. Какие у меня есть варианты и их сильные и слабые стороны?
Ответ №1:
Поскольку существует ограничение на количество запросов от хоста, я бы сначала попытался запустить синхронную программу и проверить, достигнут ли предел до истечения минуты. Если это произойдет, то не будет необходимости одновременно запускать других рабочих. Однако, если предел не достигнут, я бы рекомендовал вам использовать оба asyncio
и aiohttp
для асинхронного получения запросов. Существует масса информации о том, как начать использовать эти библиотеки.
Другим вариантом было бы использовать старый добрый threading
модуль (или concurrent.futures
для варианта использования более высокого уровня). Оба варианта имеют свои плюсы и минусы. Что я бы сделал, так это сначала попробовал concurrent.futures
(а именно ThreadPoolExecutor
context manager) модуль, поскольку вам нужно добавить только примерно одну строку кода. Если это не приводит к выполнению задания, тогда помните: используйте, asyncio
если нужно, и threading
если вы обязаны. Оба этих модуля просты в использовании и понимании, но они должны следовать общей структуре, что означает, что вам, скорее всего, придется изменить свой код.
Комментарии:
1. Предел легко достигается при 120 запросах в минуту, но я мог бы увеличить его, получив больше токенов доступа. Я уже использую asyncio и aiohttp для получения данных. В этом состоянии бот может справиться со всем этим, но поскольку мне уже требуется около 5 минут, чтобы получить все данные с веб-сайта, я думаю, мне нужно масштабировать его, если я хочу больше гильдий.