gpt4 book ai didi

python-3.x - 有没有办法在 pandas read_sql 函数中设置超时?

转载 作者:行者123 更新时间:2023-12-05 01:17:48 38 4
gpt4 key购买 nike

我在 python 代码中通过 ODBC 连接连接到 DB2 服务器。 DB2 服务器为了维护而重新启动或在运行特定的服务器端任务时断开我的连接,一天发生 1 或 2 次。那时,如果我的代码已经开始执行 pandas read_sql 函数来获取查询结果,那么即使服务器在 1 小时后启动,它也会进入无限等待。

我想在 read_sql 的执行中设置一个超时,并且每当发生超时时,我都想刷新与 DB2 服务器的连接,以便在继续查询之前再次建立新的连接。

我尝试过创建一个 while 循环并从 DB2 中挑选数据 block ,而不是一次提取整个结果,但问题是如果 DB2 在提取 block 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

如果 sql 执行时间超过 3 分钟,我需要 read_sql 抛出一些异常或返回一个值。如果发生这种情况,我需要刷新与 DB2 的连接。

最佳答案

您可以使用包 func-timeout。您可以通过 pip 安装如下:

pip install func-timeout

因此,例如,如果您想要限制运行 5 秒的函数“doit('arg1','arg2')”,则可以使用 func_timeout 调用它:

from func_timeout import func_timeout, FunctionTimedOut

try:
doitReturnValue = func_timeout(5, doit, args=(‘arg1’, ‘arg2’))
except FunctionTimedOut:
print ( “doit(‘arg1’, ‘arg2’) could not complete within 5 seconds, hence terminated.\n”)
except Exception as e:
# Handle any exceptions that doit might raise here

关于python-3.x - 有没有办法在 pandas read_sql 函数中设置超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56473948/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com