亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在線程或進程之間共享 cx_Oracle 游標

在線程或進程之間共享 cx_Oracle 游標

藍山帝景 2021-11-23 16:18:13
我在 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 參數)。然后,您可以使用每個連接來查詢數據的不同部分。


查看完整回答
反對 回復 2021-11-23
  • 1 回答
  • 0 關注
  • 235 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號