Как предотвратить ошибку «ProgrammingError: execute cannot be used while an asynchronous query is underway
»? Из документов в нем говорится, что я должен использовать psycopg2.extras.wait_select, если я использую поддержку сопрограммы, такую как gevent., Но я все еще получаю эту ошибку, когда я ее использую. Я выделил ошибку, которую я получаю в фрагменте ниже.Ошибка Python: выполнить нельзя, пока выполняется асинхронный запрос
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)
])
Итак, я попробовал ваше предложение и создал курсор в методе 'execute_query', и я все равно получаю ту же ошибку. – User134
Вы пробовали одно соединение, как в примере кода, или четыре соединения/курсоры (по одному на каждую сопрограмму)? – paisanco
Ох. Виноват. С четырьмя соединениями ошибка исчезает. Но меня интересует эффективность использования нового соединения каждый раз, когда я хочу сделать один запрос. – User134