如何防止错误“ProgrammingError: execute cannot be used while an asynchronous query is underway
”?从文档中可以看出,如果我使用的是像gevent这样的协同程序支持,那么我应该使用psycopg2.extras.wait_select,但是当我使用它时仍然会遇到这个错误。我已经隔离了下面代码片段中的错误。
con = psycopg2.connect(database=DATABASE_NAME, user=DATABASE_USERNAME)
def execute_query(cur, query, params):
psycopg2.extras.wait_select(con)
cur.execute(query, params)
psycopg2.extras.wait_select(con)
rows = cur.fetchall()
print rows[0]
cur = con.cursor()
query = "SELECT * FROM mytable"
gevent.joinall([
gevent.spawn(execute_query, cur, query, None),
gevent.spawn(execute_query, cur, query, None),
gevent.spawn(execute_query, cur, query, None),
gevent.spawn(execute_query, cur, query, None)
])
您试图在一个连接上同时执行多个事务。psycopg文档说这不是线程安全的,并将导致错误。见Asynchronous support and Support for coroutine libraries下方
一种可能的解决方案是每个协程使用一个数据库连接,每个连接都有一个游标(在本例中为4个不同的连接和游标)。
相关问题 更多 >
编程相关推荐