Возможно, вы могли бы использовать состояние курсора, чтобы сказать вам, используется ли курсор. Допустим, у вас был следующий курсор:
new_cursor = new_connection.cursor()
cursor.execute(new_query)
, и вы хотели посмотреть, доступно ли это соединение для использования другим курсором. Вы могли бы быть в состоянии сделать что-то вроде:
if (new_cursor.rowcount == -1):
another_new_cursor = new_connection.cursor()
...
Конечно, все это действительно говорит вам о том, что курсор еще ничего не выполнил с момента последнего закрытия. Он может указывать на выполненный курсор (и, следовательно, на соединение, которое было закрыто), или он может указывать на курсор, который был только что создан или присоединен к соединению. Другой вариант - использовать цикл try / catch, что-то вроде:
try:
another_new_cursor = new_connection.cursor()
except ConnectionError?: //not actually sure which error would go here but you get the idea.
print("this connection is busy.")
Конечно, вы, вероятно, не хотите получать спам с печатными сообщениями, но вы можете делать что угодно в этом кроме блокировки, ожидания в течение 5 секунд, ожидания передачи другой переменной, ожидания ввода пользователя и т. д. Если вы ограничены PEP 249, вам придется многое делать с нуля. Есть ли причина, по которой вы не можете использовать внешние библиотеки?
РЕДАКТИРОВАТЬ: Если вы хотите выйти за пределы PEP 249, вот кое-что, что может работать, но это может не подходить для ваших целей. Если вы используете библиотеку Python mysql
, вы можете воспользоваться методом is_connected
.
new_connection = mysql.connector.connect(host='myhost',
database='myDB',
user='me',
password='myPassword')
...stuff happens...
if (new_connection.is_connected()):
pass
else:
another_new_cursor = new_connection.cursor()
...