Какая лучшая связка MySQL DB и Python 3 multiprocessing?
Сейчас использую pymysql. Все устраивало до того момента, когда появилась необходимость распараллелить нагрузку.
при использовании multiprocessing.Poll() скрипт стал зависать.
Единственное, что может вызвать такое поведение, это использование pymysql в субпроцессах.
У меня одно соединение с базой, глобальное.
Посоветуйте, как лучше поступить: Использовать другой коннектор к базе (какой?) или же создавать каждый раз новое подключение к базе (что я так понимаю ухудшит производительность) ? Запросов ожидается до 5 в секунду. В дальнейшем думаю макс до 10.
пробовал использовать в субпроцессах multiprocessing.Lock() но это не дало никакого результата.
я так вообще понимаю, что это баг в pymysql ? я бы даже зарепортил его, но не уверен, что это не ожидаемое поведение.. мож я что-то делаю не так?)
честно говоря не знаю что там используется внутри. я просто создаю пулл и запускаю в нем фунцию.
примерно так
pool = Pool(cores)
pool.map(func,args)
pool.close()
pool.join()
dimonchik2013: возможно опять не совсем правильно Вас понимаю.. запросы выполняются вот так
cur = connection.cursor()
cur.execute(sql_str)
cur.commit()
сейчас переписал так, что для каждого запроса к базе создаю новое подключение, выполняю запрос и закрываю подключение. но мне кажется так очень неправильно делать...
да, сорри, запутал вас
вот тут: вместо cur.execute(sql_str) нужно
cursor.executemany(""" сюда запрос""" , insToDb)
где insToDb - список кортежей (вроде бы и список списков работает, но у меня в винде нет, что-то типа insToDb = [tuple(x) for x in csvlist], где x - строка параметров запроса), т.е. он за раз выполняет много строк, 100-1000 свободно можно