【发布时间】:2019-03-01 13:13:49
【问题描述】:
我在 Oracle 中有一个数据库。我需要导出一些数据,处理它们并将数据保存到文件中。表中是 oracle sdo_geom,我需要将几何图形转换为 WKT format。几何体真的很大,一个有数千个顶点的大多边形。我正在使用SDO_UTIL.TO_WKTGEOMETRY() 函数,但它需要的时间太长。在这种情况下,选择(转换几何)到数据库是一个瓶颈。
我想到了 Python 中的 multihreading 或 multiprocessing。场景应该是这样的:
- 创建与数据库的连接
- 创建 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 几何,但在我看来这看起来更通用。
【问题讨论】:
标签: python multithreading multiprocessing psycopg2 cx-oracle