我在 Oracle 中有一個數據庫。我需要導出一些數據,處理它們并將數據保存到文件中。表中是 oracle sdo_geom,我需要將幾何圖形轉換為WKT 格式。幾何體真的很大,有數千個頂點的大多邊形。我正在使用SDO_UTIL.TO_WKTGEOMETRY()函數,但它花費的時間太長。在這種情況下,選擇(轉換幾何)到數據庫中是一個瓶頸。我考慮了Python 中的多線程或多處理。該場景應如下所示:創建到數據庫的連接創建 cx_Oracle.cursor然后啟動多個共享游標的線程或進程在每個線程(或進程)中,我將按塊從數據庫(同一個表)中選擇數據然后將所有數據發送到負責處理數據并保存到文件的線程或進程我正在使用fetchmany()通過塊選擇數據:def get_row_chunks(self): while True: rows = self.cursor.fetchmany() if not rows: break yield rows所以我的問題是,是否可以使用多線程或多處理來解決這個問題,以及如何(使用cx_Oracle)或psycopg2 for PostgreSQL 我認為這并不重要。我認為光標在這些庫中具有相同的行為?;蛘卟豢赡茉诰€程或進程之間輕松共享游標??赡艿慕鉀Q方案是在數據庫中預生成 WKT 幾何,但這在我看來是更通用的解決方案。
1 回答

萬千封印
TA貢獻1891條經驗 獲得超3個贊
您不能同時對 cx_Oracle 中的一個游標或連接執行多個操作。因此,例如,您不能同時進行提取。如果您嘗試這樣做,您會發現 fetches 阻塞。因此,我建議您只需在一個線程中執行提取并將提取的數據傳遞給另一個線程或多個線程進行處理。
另一種可能性是創建一個池,它允許您創建多個連接并在多個線程中使用它們(在創建池時使用 threaded=True 參數)。然后,您可以使用每個連接來查詢數據的不同部分。
添加回答
舉報
0/150
提交
取消