2012-02-21 82 views
1

我試圖做共享多個線程之間的psycopg2連接。正如文檔中提到的,我通過從共享連接創建新的遊標對象來實現這一點,無論何時我在新線程中使用它。Psycopg2併發問題

def delete(conn): 
    while True: 
     conn.commit() 

def test(conn):  
    cur = conn.cursor() 
    thread.start_new_thread(delete,(conn,)) 
    i = 1 
    while True: 
     cur.execute("INSERT INTO mas(taru,s) values (2,%s)",(i,)) 
     print i 
     i = i +1 
     conn.commit() 

運行後,我得到的輸出喜歡,

1 
2 
... 
98 
99 
Traceback (most recent call last): 
File "postgres_test_send.py", line 44, in <module> 
    cur.execute("INSERT INTO mas(taru,s) values (2,%s)",(i,)) 
psycopg2.InternalError: SET TRANSACTION ISOLATION LEVEL must be called before any query 

這是怎麼回事?

+0

請解決您的壓痕。首先點擊此評論上方的「修改」鏈接。然後正確輸入代碼。然後選擇它並點擊在輸入框頂部看到的'{}'按鈕。這會將所有行縮進4個空格,從而生成格式正確的代碼。我會爲你做,但我不知道正確的縮進會是什麼。 – senderle 2012-02-21 19:57:41

+0

感謝您的提示。我糾正了代碼 – Phani 2012-02-21 20:17:37

回答

0

的錯誤是不是在最近psycopg2的版本:那麼它可能已經被固定在2.4.2。

+0

是的。我一直在使用舊版本(2.2.1) – Phani 2012-02-24 01:47:49

+0

報道固定在2.4.2的bug,但其原因仍然存在,產生更少的嚴重問題。修正,將在2.4.5中發佈。非常感謝您的報告和測試。 – piro 2012-02-24 03:34:18