Мне нужно ускорить вставки в мою MySQL таблицу, в настоящее время у меня 6 вставок в секунду, но мне нужно около 60 в секунду, потому что мне нужно проанализировать характеристики около 300000 автомобилей с помощью Python и вставить соответствующие характеристики каждого автомобиля в базе данных.
Я использую 4 разных модуля для работы:
- module1 - менеджер подключений
- module2 - Главный модуль, который содержит всю информацию о машинах и создает несколько потоков.
- module3 - Модуль, который имеет некоторые функции, которые модуль2 использует при анализе каждой машины. Этот модуль отправляет запросы в базу данных каждый раз, когда он используется.
- module4 - Модуль, который имеет некоторые функции, которые использует module3. Этот модуль также отправляет запросы в базу данных каждый раз, когда он используется.
Во время моих исследований по ускорению работы я обнаружил, что лучшим решением в моем случае является использование потоковой передачи. автомобилей одновременно, каждый протектор анализирует один автомобиль параллельно, параллельно выполняя запросы в БД, чтобы найти информацию об автомобиле, а затем сохранять характеристики автомобиля в БД.
Проблема в том, если я открывать и закрывать соединение каждый раз, когда module3 и module4 используются ступенями, это занимает много времени, процесс открытия соединения занимает много времени, для работы какой многопоточности мне пришлось создать соединение, для лучшей организации я решил создать отдельный модуль (module1), который создает пул соединений и управляет соединениями, я хочу создать соединение в модуле 1 и импортировать соединение в модуле 3 и в модуле 4, проблема в том, что я не знаю, как делать каждый для каждого потока, всегда использовать одно и то же соединение независимо от модуля, например t hread1 использует cnx1 во всех модулях, thread2 использует cnx2 во всех модулях. Это лучший подход к проблеме, и как мне это сделать? Ниже приведен код моего модуля 1.
Примечание: я уже храню некоторое количество автомобилей в памяти и вставляю их, чтобы увеличить скорость вставки.
class CompanyDB:
db = 'company_name'
def __init__(self):
self.cnx_pool = None
def create_pool(self):
if self.cnx_pool is not None:
print('database pool already created, using same pool')
return self.cnx_pool
else:
self.cnx_pool = mysql.connector.pooling.MySQLConnectionPool(pool_name="xxxx",
pool_size=10,
pool_reset_session=True,
host='xxxx.com',
database='xxxx',
user='xxxx',
password='xxxx')
print('created autoexp pool')
return self.cnx_pool
def close(self):
self.close()
print('connection closed')
def get_cnx_from_pool(self):
cnx = self.cnx_pool.get_connection()
print('got connection of company db')
return cnx
```