У меня есть основной скрипт Python, который подключается к базе данных MySQL и извлекает из него несколько записей. На основе возвращаемого результата начинается столько потоков (экземпляров класса), сколько захвачено множество записей. Каждый поток должен вернуться к базе данных и обновить другую таблицу, установив один флаг состояния в другое состояние («процесс запущен»).Как обрабатывать соединения MySQL с многопоточным Python
Для достижения этой цели я попытался:
1.) Пропустите подключение к базе всех потокам 2.) Открыть новое соединение с базой данных из каждого потока
, но ни один из них не работал.
Я мог запустить свое обновление без каких-либо проблем в обоих случаях с помощью try/except, но таблица MySQL не была обновлена, и ошибка не была сгенерирована. В обоих случаях я использовал фиксацию.
Вопрос в том, как обрабатывать соединения MySQL в таком случае?
Обновление на основе первых нескольких комментариев:
MAIN SCRIPT
-----------
#Connecting to DB
db = MySQLdb.connect(host = db_host,
db = db_db,
port = db_port,
user = db_user,
passwd = db_password,
charset='utf8')
# Initiating database cursor
cur = db.cursor()
# Fetching records for which I need to initiate a class instance
cur.execute('SELECT ...')
for row in cur.fetchall() :
# Initiating new instance, appending it to a list and
# starting all of them
CLASS WHICH IS INSTANTIATED
---------------------------
# Connecting to DB again. I also tried to pass connection
# which has been opened in the main script but it did not
# work either.
db = MySQLdb.connect(host = db_host,
db = db_db,
port = db_port,
user = db_user,
passwd = db_password,
charset='utf8')
# Initiating database cursor
cur_class = db.cursor()
cur.execute('UPDATE ...')
db.commit()
трудно сказать что-либо, не зная, как вы подключаетесь к вашей БД и как можно реализовать обновления. – Ashalynd
Я не совсем понимаю ваш вопрос. Является ли самый простой случай работой, например, одним потоком python, подключаться к mysql и обновлять таблицу? – qqibrow
@Ashalynd Спасибо, что нашли время! И извините, но я был АФК. Я обновил свой вопрос с помощью snipet кода из моих основных и кодов классов. Именно так я запускаю экземпляры и открываю соединения с базами данных. Я пытался поймать ошибку при открытии соединения и выполнении запроса из экземпляра с помощью try/except без везения. – g0m3z