Я подключаюсь к серверу DB2 через соединение ODBC в моем коде Python. Сервер DB2 перезагружается для обслуживания или отключает меня при выполнении определенных задач на стороне сервера, происходит 1 или 2 раза в день. В то время, если мой код начал выполнять функцию pandas read_sql для извлечения результата запроса, он переходит в бесконечное ожидание, даже когда сервер работает, скажем, через 1 час.
Я хочу установить тайм-аут при выполнении read_sql, и всякий раз, когда происходит этот тайм-аут, я хочу обновить соединение с сервером DB2, чтобы снова установить новое соединение перед продолжением запроса.
Я пытался сделать цикл while и собирать порции данных из DB2 вместо того, чтобы извлекать весь результат сразу, но проблема в том, что DB2 отключается при извлечении кода Python порции все еще впадает в бесконечное ожидание.
chunk_size = 1000
offset = 0
while True:
sql = "SELECT * FROM table_name limit %d offset %d" % (chunk_size,offset)
df = pd.read_sql(sql, conn)
df.index += (offset+1)
offset += chunk_size
sys.stdout.write('.')
sys.stdout.flush()
if df.shape[0] < chunk_size:
break
Мне нужно, чтобы read_sql выдал какое-то исключение или вернул значение, если выполнение sql занимает более 3 минут. Если это произойдет, мне нужно обновить соединение с DB2.