Come si impedisce l'errore "ProgrammingError: execute cannot be used while an asynchronous query is underway
"? Dai documenti dice che dovrei usare psycopg2.extras.wait_select se sto usando un supporto di coroutine come gevent., Ma sto ancora ricevendo quell'errore quando lo sto usando. Ho isolato l'errore che sto ricevendo nello snippet qui sotto.Errore Python: esecuzione non può essere utilizzata mentre è in corso una query asincrona
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)
])
Così ho provato il tuo suggerimento e ho creato il cursore nel metodo 'execute_query' e ho ancora lo stesso errore. – User134
hai provato una connessione come nell'esempio di codice o quattro connessioni/cursori (uno per coroutine)? – paisanco
Oh. Errore mio. Con quattro connessioni, l'errore scompare. Ma mi chiedo dell'efficienza dell'uso di una nuova connessione ogni volta che voglio fare una singola query. – User134