Python 连接 Oracle 数据库加入超时处理机制

Python 连接 Oracle 数据库加入超时处理机制

  • 0. 引言
  • 1. 示例代码

0. 引言

Python 连接 Oracle 数据库,如何 SQL 语句有问题时还不加入超时机制,就会一致执行停止在那里。

1. 示例代码

1-1. 代码讲解

下面的代码展示了如何在 Python 中使用多线程来处理数据库查询,同时加入了超时处理机制。代码的主要作用是在给定的时间内尝试执行 SQL 查询,并处理可能出现的超时或异常情况。

  1. 检查连接:首先检查数据库连接 conn 是否存在。如果连接有效,那么继续执行后续操作。

  2. 创建结果队列:使用 queue.Queue() 创建一个队列 result_queue,用于存放查询结果。这是因为多线程环境下,线程之间通信需要通过线程安全的队列进行。

  3. 启动查询线程:创建并启动一个线程 query_thread,该线程运行 run_query 函数执行 SQL 查询,并将结果放入 result_queue 中。传递给线程的参数包括 SQL 查询字符串 sql 和结果队列 result_queue

  4. 设置超时时间:设定一个超时时间 timeout,此例中为 10 秒。这意味着如果查询在 10 秒内没有返回结果,将会处理为超时。

  5. 尝试获取查询结果

    • 使用 result_queue.get(timeout=timeout) 尝试在超时时间内获取查询结果。
    • 如果在超时时间内成功获取到结果,则进一步检查结果是否为异常。如果是异常(比如查询出错),则打印错误信息并返回异常信息;如果不是异常,则直接返回查询结果。
  6. 处理超时情况:如果在指定的超时时间内没有获取到结果(queue.Empty 异常被触发),则打印并返回“查询超时”信息。此时,你可以选择取消查询或采取其他措施。需要注意的是,停止正在运行的线程或查询可能很复杂,需要根据应用程序的具体需求来特别处理。

  7. 等待线程结束:无论查询是否超时,使用 query_thread.join() 确保查询线程正确结束,这是良好的线程同步做法。

  8. 关闭数据库连接:最后,不要忘记在所有操作完成后关闭数据库连接 conn.close(),以释放资源。

1-2. 示例代码

def run_sql_oracle(sql: str) -> Union[pd.DataFrame, str, None]:if conn:# 在这里创建一个队列用来存储查询结果result_queue = queue.Queue()query_thread = threading.Thread(target=run_query, args=(sql, result_queue))query_thread.start()# 为查询设置一个超时限制timeout = 15  # 15秒try:# 尝试在超时时间内获取结果results = result_queue.get(timeout=timeout)# 检查结果是否为异常,如果是则进行相应处理if isinstance(results, Exception):print(f"查询失败: {results}")return f"{results}"else:return resultsexcept queue.Empty:print("查询超时。")return "查询超时。"# 在这一点上,你可以尝试取消查询或采取其他行动。# 注意:停止一个正在运行的线程或查询可能比较复杂,可能需要根据你的应用需求进行特定的处理。finally:query_thread.join()# 不要忘记关闭你的连接conn.close()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/6907.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

24年最新抖音、视频号0成本挂机,单号每天收益上百,可无限挂

详情介绍 这次给大家带来5月份最新的短视频挂机项目,简单易上手,而且不需要任何投入,经过测试收益非常可观,软件完全免费,特别适合没有时间但是想做副业的家人们

ai生图什么软件好?推荐7个不错的AI绘画软件

ai生图什么软件好?推荐7个不错的AI绘画软件!小编带你进入一个创意与科技交融的奇妙世界——AI绘画,让我们一同领略其中的魅力吧~ 一、爱制作AI 这款AI人工智能软件是一款多功能的工具平台,集合了AI问答、AI绘画和AI智能写作等功能…

在离线环境中将运行 Oracle DB 12c 的 CentOS 7.5 原地升级并迁移至 RHEL 7.9

《OpenShift / RHEL / DevSecOps 汇总目录》 说明 本文只是说明如何在 CentOS 7.5 上准备 Oracle DB 12c 验证环境,而将该环境升级并迁移至 RHEL 7.9 的操作过程请参见:《在离线环境中将 CentOS 7.5 原地升级并迁移至 RHEL 7.9》一文。 另外&#xff…

我希望未来10年,人工智能可以帮我解决这4件小事

生活在一线大城市的我,现在几乎整天被大数据、人工智能、机器学习、智慧生活的词汇环绕立体包围着,让我时刻感觉到,再过10年,我们五一假期真的可以摆脱现在擦肩接踵的旅游盛况了。但我其实要求倒是没这么高,我真心希望…

生产者与消费者 PV操作 与 阻塞队列

文章目录 普通方式 wait 与 notifyAll消费者生产者桌子测试类运行结果 阻塞队列Cook生产者Customer消费者测试类 普通方式 wait 与 notifyAll 消费者 package abc;public class Customer extends Thread{Overridepublic void run() {while (true) {synchronized (Desk.lock) {…

音频文件转文字怎么操作?3个方法手把手教你

音频文件转文字怎么操作?音频文件转文字,即将音频中的语音内容转换为可编辑和搜索的文本格式,是一项在多个场景中都非常实用的技术。无论是在会议记录、采访整理、学习笔记,还是视频字幕制作等场景中,音频转文字技术都…

吴恩达机器学习笔记:第 8 周-14降维(Dimensionality Reduction) 14.6-14.7

目录 第 8 周 14、 降维(Dimensionality Reduction)14.6 重建的压缩表示14.7 主成分分析法的应用建议 第 8 周 14、 降维(Dimensionality Reduction) 14.6 重建的压缩表示 在以前的视频中,我谈论 PCA 作为压缩算法。在那里你可能需要把 1000 维的数据压缩100 维特…

企业计算机服务器中了rmallox勒索病毒怎么处理,rmallox勒索病毒解密恢复

网络在为企业提供便利的同时,也为企业的数据安全带来严重威胁。随着网络技术的不断发展,越来越多的企业利用网络开展各项工作业务,网络数据安全问题,一直成为企业关心的主要话题,但网络威胁随着网络技术的不断成熟&…

nginx--反向代理

反向代理 指的是代理外网用户的请求到内部的指定web服务器器,并将数据返回给用户的一种方式,这是用的比较多的一种方式 模块和功能 ngx_http_proxy_module: 将客户端的请求以http协议转发至指定服务器进行处理。ngx_stream_proxy_module&…

CDGA|企业的不同阶段如何做数据治理?

随着数字化时代的到来,数据已经成为企业运营和决策的核心要素。因此,数据治理成为企业在不同阶段必须面对的重要课题。 本文将探讨企业在初创期、成长期、成熟期和转型期四个阶段应如何进行数据治理。 初创期:建立数据治理基础 在初创期&…

美的集团太子惨败五一档,一顿火锅解决不了什么事

杨幂于谦的组合,很新鲜。 联丰策略拥有一支由知名互联网公司和国内证券金融机构的行业专家组成的一流运营团队。凭借他们在互联网产品开发和金融风险管理方面的丰富经验,我们的团队致力于为客户提供专业和个性化的证券交易服务。 当初,由丁晟导演的电影…

CUDA CPP Unity Compute Shader

为学 开始一个新的学习计划,涵盖: 主题学习内容CUDAProfessional CUDA C Programming/NVIDIA CUDA初级教程视频(周斌)CCPrimer / The Cherno CPPUnity Compute ShaderUdemy Learn to Write Unity Compute ShadersLinear AlgebraMIT 18.06 Prof.Gilbert…

21.使用哈希桶封装unordered_set和unordered_map(哈希桶的迭代器的实现)

1. hash表迭代器的实现 1.1 普通迭代器 // 由于迭代器的实现&#xff0c;需要使用哈希桶&#xff0c;但是哈希桶的实现&#xff0c;又在迭代器之后 // 因此&#xff0c;我们给出一个前置声明&#xff0c;旨在告诉系统&#xff0c;哈希桶已经被实现了 // 前置声明 template<…

产品经理应该懂业务吗?

最近看到一个对新一代产品经理的定义&#xff1a;懂技术、擅运营、会管理、懂业务、能决策 第一反应是&#xff1a;哇偶&#xff0c;产品经理更牛掰了~~~ 说真的&#xff0c;产品经理岗位发展这么多年&#xff0c;还把产品经理定位在十项全能 不是进步&#xff0c;而是倒退。…

Aigtek射频功率放大器的主要功能是什么

射频功率放大器是一种专门用于放大射频信号功率的电子器件&#xff0c;它在无线通信、雷达系统、卫星通信等射频应用中起着至关重要的作用。下面将详细介绍射频功率放大器的主要功能。 信号放大&#xff1a;射频功率放大器的主要功能之一就是将传入的射频信号放大到所需的功率水…

Flask与HTTP

一、请求响应循环 “请求-响应循环”&#xff1a;客户端发出请求&#xff0c;服务器处理请求并返回响应。 Flask Web程序的工作流程&#xff1a; 当用户访问一个URL&#xff0c;浏览器便生成对应的HTTP请求&#xff0c;经由互联网发送到对应的Web服务器。Web服务器接收请求&a…

pandas学习笔记13

map,apply,applymap ** apply&#xff1a;应用在DataFrame的行或列中&#xff1b; applymap&#xff1a;应用在DataFrame的每个元素中&#xff1b; map&#xff1a;应用在单独一列&#xff08;Series&#xff09;的每个元素中。** apply()方法 前面也说了apply方法是一般性的…

【计算机网络】FTP站点配置搭建教程以及相关问题解决方案(超详细)

文章目录 1、安装Window Server 20082、搭建FTP环境&#xff08;1&#xff09;安装FTP服务器&#xff08;2&#xff09;配置FTP服务器&#xff08;3&#xff09;测试FTP连接 3、遇到的问题以及解决方案&#xff08;1&#xff09;Windows无法访问此文件夹&#xff08;2&#xff…

上传文件到 linux

一、mac 法一&#xff1a;scp 先进入mac的 Node_exporter文件&#xff08;要上传的文件&#xff09;目录下 输入scp -P 端口号 文件名 rootIP:/存放路径 scp -P 22 node_exporter-1.8.0.linux-amd64.tar.gz root192.***.2:/root 法二、 rz mac 安装 lrzsz&#xff0c;然后…

dp 动态规划 力扣

64. 最小路径和 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 示例 1&#xff1a; 输入&#xff1a;grid [[1,3,1],[1,5,1],[4,2,1]] 输…