我試圖執行3個不同的postgresql查詢與不同的表。每個查詢需要2秒鐘執行。我想知道是否可以同時運行所有3個查詢,這樣我可以節省4秒。我嘗試使用pyscopg2
的異步功能,但它只返回上次查詢的結果。任何人都可以指出我做錯了什麼?如何使用pyscopg2的異步功能?
import select
import psycopg2
import psycopg2.extensions
def wait(conn):
while 1:
state = conn.poll()
if state == psycopg2.extensions.POLL_OK:
break
elif state == psycopg2.extensions.POLL_WRITE:
select.select([], [conn.fileno()], [])
elif state == psycopg2.extensions.POLL_READ:
select.select([conn.fileno()], [], [])
else:
raise psycopg2.OperationalError("poll() returned %s" % state)
aconn = psycopg2.connect(
dbname=pg_name,
user=pg_username,
host=pg_host,
password=pg_password,
async=1)
wait(aconn)
acurs = aconn.cursor()
acurs.execute(
"SELECT 1;"
"SELECT ST_Length(ST_GeomFromText"
"('LINESTRING(743238 2967416,743238 2967450)',4326));"
"SELECT 3;"
)
wait(acurs.connection)
result = acurs.fetchall()
print result
僅打印: 「結果」:[[3]]