ZIK1337
@ZIK1337

Как с помощью pymysql работать в многопотоке?

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

Как тогда можно реализовать задачу?
  • Вопрос задан
  • 119 просмотров
Пригласить эксперта
Ответы на вопрос 4
@dmtrrr
Backend developer
Какую проблему вы пытаетесь решить?
Можно сделать так, чтобы каждый поток отправлял результат своей работы в основной поток, а тот уже писал в БД.
Ответ написан
@bacon
200 потоков
вычислений в потоке
А ты точно понимаешь как работают потоки в python?

А так вариантов много, например:
- внутри каждого потока получать коннект не напрямую от mysql, а через пул, и не всё время, а только когда надо считать/записать.
- посредством очередей, разделить "вычисления" и запись в БД
Но еще раз, при такой постановки задачи - 200 потоков это перебор
Ответ написан
@ArtiomK
Соединения с базой данных можно создавать только в потоке, один поток - одно активное соединение . В Python GIL не позволит сделать вычисления быстрее за счёт многопоточности, если нужны именно вычисления используйте multiprocessing. Если не нужны вычисления рассмотрите asyncio как альтернативу multithreading.
Ответ написан
@bbkmzzzz
еще один поток, который работает с базой, и слушает очередь, потоки воркеры пишут в очередь, поток с базой пишет в базу
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
от 80 000 до 120 000 ₽
ai.people Санкт-Петербург
от 150 000 до 250 000 ₽
23 янв. 2021, в 18:06
5000 руб./за проект
23 янв. 2021, в 17:51
150000 руб./за проект