我正在嘗試使用 python 運行多個進程Pool,每個進程都將查詢數據庫,這就是為什么我試圖將連接傳遞給每個進程,然后啟動一個新的游標以執行查詢db = DBConnection()sessoion_pool, cursor= db.get_session_pool()connection = sessoion_pool.acquire()part_list = [e for l in get_parts_list() for e in l]pool = Pool()pool.map(scan_part_best_model, (part_list, connection))但它一直在拋出TypeError: can't pickle cx_Oracle.Connection objects 我也嘗試在函數邏輯中做同樣的事情Session和使用session.acquire(),但它會拋出同樣的錯誤
1 回答

白衣非少年
TA貢獻1155條經驗 獲得超0個贊
進程之間不能共享連接。但是,您可以使用如下代碼在同一進程中執行并行查詢:
pool = cx_Oracle.SessionPool(USER, PASSWORD, DSN, min=5, max=20, increment=5)
def do_query(part_num):
with pool.acquire() as conn:
cursor = conn.cursor()
cursor.execute("select some_stuff from some_table where part_num = :1",
[part_num])
print("Fetched part information for part", part_num)
threads = [threading.Thread(target=do_query, args=(p,)) for p in get_parts_list()]
for t in threads:
t.start()
for t in threads:
t.join()
從數據庫中獲取數據后,如果您有大量工作要做,您可以通過多處理將獲取的數據傳遞給子進程來完成這項工作。您不能在子進程中執行任何數據庫工作——至少在沒有首先連接該子進程的情況下是這樣。
添加回答
舉報
0/150
提交
取消