Как использовать несколько курсоров в mysql .connector? - PullRequest
0 голосов
/ 10 января 2020

Я хочу выполнить несколько запросов, не блокируя друг друга. Я создал несколько курсоров и сделал следующее, но получил mysql.connector.errors.OperationalError: 2013 (HY000): Lost connection to MySQL server during query

import mysql.connector as mc
from threading import Thread

conn = mc.connect(#...username, password)
cur1 = conn.cursor()
cur2 = conn.cursor()

e1 = Thread(target=cur1.execute, args=("do sleep(30)",)) # A 'time taking' task
e2 = Thread(target=cur2.execute, args=("show databases",)) # A simple task

e1.start()
e2.start()

Но я получил эту OperationalError. И, читая несколько других вопросов, некоторые предполагают, что использование нескольких соединений лучше, чем использование нескольких курсоров. Так я буду использовать несколько соединений?

1 Ответ

0 голосов
/ 12 января 2020

У меня нет полного контекста вашей ситуации, чтобы понять соображения производительности. Да, запуск нового соединения может считаться тяжелым, если вы работаете с жесткими временными ограничениями, короткими относительно времени, которое требуется для установки нового соединения, и вы были вынуждены делать это для каждого запроса ...

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

С другой стороны с другой стороны, если все время вашего запроса достаточно велико по сравнению со временем, которое требуется для создания нового соединения, и вы не собираетесь выполнять больше нескольких запросов параллельно, то это может быть разумным вариантом для создания соединений по требованию. Просто имейте в виду, что вы будете сталкиваться с ограничениями по количеству открытых соединений, если вы попытаетесь слишком много сделать go, а также с ограничениями ресурсов в самой системе базы данных. Вы, вероятно, не хотите делать что-то подобное с общей базой данных. Опять же, это только разумный вариант в некоторых очень специфических c контекстах.

...