2012-02-21 69 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