Есть ли способ поставить тайм-аут в функцию read_sql для панд? - PullRequest
0 голосов
/ 06 июня 2019

Я подключаюсь к серверу 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.

...