我在 Oracle 中有一個(gè)數(shù)據(jù)庫(kù)。我需要導(dǎo)出一些數(shù)據(jù),處理它們并將數(shù)據(jù)保存到文件中。表中是 oracle sdo_geom,我需要將幾何圖形轉(zhuǎn)換為WKT 格式。幾何體真的很大,有數(shù)千個(gè)頂點(diǎn)的大多邊形。我正在使用SDO_UTIL.TO_WKTGEOMETRY()函數(shù),但它花費(fèi)的時(shí)間太長(zhǎng)。在這種情況下,選擇(轉(zhuǎn)換幾何)到數(shù)據(jù)庫(kù)中是一個(gè)瓶頸。我考慮了Python 中的多線程或多處理。該場(chǎng)景應(yīng)如下所示:創(chuàng)建到數(shù)據(jù)庫(kù)的連接創(chuàng)建 cx_Oracle.cursor然后啟動(dòng)多個(gè)共享游標(biāo)的線程或進(jìn)程在每個(gè)線程(或進(jìn)程)中,我將按塊從數(shù)據(jù)庫(kù)(同一個(gè)表)中選擇數(shù)據(jù)然后將所有數(shù)據(jù)發(fā)送到負(fù)責(zé)處理數(shù)據(jù)并保存到文件的線程或進(jìn)程我正在使用fetchmany()通過(guò)塊選擇數(shù)據(jù):def get_row_chunks(self): while True: rows = self.cursor.fetchmany() if not rows: break yield rows所以我的問(wèn)題是,是否可以使用多線程或多處理來(lái)解決這個(gè)問(wèn)題,以及如何(使用cx_Oracle)或psycopg2 for PostgreSQL 我認(rèn)為這并不重要。我認(rèn)為光標(biāo)在這些庫(kù)中具有相同的行為。或者不可能在線程或進(jìn)程之間輕松共享游標(biāo)。可能的解決方案是在數(shù)據(jù)庫(kù)中預(yù)生成 WKT 幾何,但這在我看來(lái)是更通用的解決方案。
1 回答

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