Sharing cx_Oracle cursor between threads or processes(在线程或进程之间共享CX_ORACLE游标)
问题描述
我在Oracle中有一个数据库。我需要导出一些数据,对它们进行处理,然后将数据保存到文件中。表中是Oraclesdo_geom,我需要将几何图形转换为WKT format。几何体真的很大,一个有数千个顶点的大多边形。我正在使用SDO_UTIL.TO_WKTGEOMETRY()函数,但时间太长。在这种情况下,选择(转换几何图形)到数据库是一个瓶颈。
我想到的是多线程或多进程。场景应该如下所示:
- 创建到数据库的连接
- 创建CX_Oracle.Cursor
- 然后启动共享光标的多个线程或进程
- 在每个线程(或进程)中,我将按块从数据库(同一个表)中选择数据
- 然后将所有数据发送到负责处理数据并保存到文件的线程或进程
我正在使用fetchmany()
通过区块:
def get_row_chunks(self):
while True:
rows = self.cursor.fetchmany()
if not rows:
break
yield rows
所以我的问题是,是否可以使用多线程或多处理来解决这个问题,以及(使用cx_Oracle)或psycopg2对于PostgreSQL我认为这并不重要。我认为游标在这些库中具有相同的行为。或者不可能在线程或进程之间很容易地共享光标。
可能的解决方案是在数据库中预先生成WKT几何图形,但在我看来这是更一般的解决方案。
推荐答案
不能同时对CX_ORACLE中的游标或连接执行多个操作。因此,例如,您不能同时进行提取。如果您尝试这样做,您会发现FETCHES块。因此,我建议您只需在一个线程中执行获取,并将获取的数据传递给另一个或多个线程进行处理。
另一种可能性是创建一个池,它允许您创建多个连接并在多个线程中使用它们(在创建池时使用threaded=True参数)。然后,您可以使用每个连接来查询数据的不同部分。
这篇关于在线程或进程之间共享CX_ORACLE游标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在线程或进程之间共享CX_ORACLE游标
基础教程推荐
- 症状类型错误:无法确定关系的真值 2022-01-01
- 将 YAML 文件转换为 python dict 2022-01-01
- 使用Python匹配Stata加权xtil命令的确定方法? 2022-01-01
- 使用 Google App Engine (Python) 将文件上传到 Google Cloud Storage 2022-01-01
- 如何在 Python 中检测文件是否为二进制(非文本)文 2022-01-01
- 哪些 Python 包提供独立的事件系统? 2022-01-01
- Python 的 List 是如何实现的? 2022-01-01
- 使 Python 脚本在 Windows 上运行而不指定“.py";延期 2022-01-01
- 合并具有多索引的两个数据帧 2022-01-01
- 如何在Python中绘制多元函数? 2022-01-01