Допустим работает 200 потоков, соединение устанавливаю в основном потоке и передаю его дочерним.
Нужно, чтобы в конце работы каждого потока (данные зависят от вычислений в потоке) шла запись одной строки в БД через это переданное соединение.
Но это не выходит сделать, вроде как соединение pymysql нельзя в потоки передавать, но и в каждом потоке коннектиться к БД - тоже нельзя.
Соединения с базой данных можно создавать только в потоке, один поток - одно активное соединение . В Python GIL не позволит сделать вычисления быстрее за счёт многопоточности, если нужны именно вычисления используйте multiprocessing. Если не нужны вычисления рассмотрите asyncio как альтернативу multithreading.
Проверяйте превышено ли максимальное кол-во подключение к БД (поле max_user_connections), проверяйте в своем "секретном" коде, корректно ли закрываете подключения после использования или они остаются открытыми.
Действительно
из текста ошибки все видно
, на stackoverflow множество вопросов именно про эту ошибку.
ArtiomK, естественно все закрывается в конце потока
да, вопросов много, а ответы сводятся к тому, что хостер не разрешает множественные подключения к БД
поэтому я и отказался от варианта коннекта к БД в каждом потоке
ZIK1337, ну все логично, можно сделать до 50 корутинов или потоков с открытыми одновременно соединениями к БД, есть еще такой примитив синхронизации как Semaphore (и в asyncio, и в threading), чтобы ограничить число одновременных обращений.
Semaphores are often used to guard resources with limited capacity, for example, a database server.