ZIK1337
@ZIK1337

Как делать выборку в потоках?

Имеется БД, к которой одновременно может быть максимум 50 подключений (лимит хостера, изменить нельзя).
Работают 200 потоков, в каждом потоке получается id, который нужно проверить по БД (через SELECT) - есть ли он там (не уникальный). И в зависимости от того, есть или нет этот id уже в БД - будут зависеть дальнейшие действия в потоке.

Если в каждом потоке создавать подключение - ошибка из-за лимита. Если ждать, пока станет меньше 50 подключений - слишком долго.
Передавать подключение дочерним потокам, используя pymysql, нельзя.

Каким образом же тогда организовать выборку в потоках?
  • Вопрос задан
  • 114 просмотров
Пригласить эксперта
Ответы на вопрос 2
Revencu
@Revencu
По вашим лимитам вы можете загрузить базу данных только на 50 запросов одновременно. Увельчьте этот лимит.
Ответ написан
@bacon
Еще раз 200 потоков, да даже 50 и каждый с подключением к БД, это сильно много для python, там много ресурсов будет тупо уходить на переключение между ними. Отвечал еще в прошлый раз, надо разделить работу с данными и работы с БД через очереди. Кладешь id в очередь, несколько потоков в цикле получают из этой очереди, обрабатывают, в простейшем случаю и записывают в бд, либо делаешь еще одну очередь, которая будет аналогично работать на запись. Через замеры производительности, определяешь оптимальное кол-во поток, сомневаюсь что там больше 10 будет.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы