Python 3.x 如何使用PyGreSQL执行并行查询?

Python 3.x 如何使用PyGreSQL执行并行查询?,python-3.x,pygresql,Python 3.x,Pygresql,我尝试使用PyGreSQL和多处理并行运行多个查询,但以下代码挂起而不返回: from pg import DB from multiprocessing import Pool from functools import partial def create_query(table_name): return f"""create table {table_name} (id integer); CREATE INDEX ON {table_name} USING BTREE (i

我尝试使用PyGreSQL和多处理并行运行多个查询,但以下代码挂起而不返回:

from pg import DB
from multiprocessing import Pool
from functools import partial


def create_query(table_name):
  return f"""create table {table_name} (id integer);
  CREATE INDEX ON {table_name} USING BTREE (id);"""

my_queries = [ create_query('foo'), create_query('bar'), create_query('baz') ]


def execute_query(conn_string, query):
  con = DB(conn_string)
  con.query(query)
  con.close()

rs_conn_string = "host=localhost port=5432 dbname=postgres user=postgres password="
pool = Pool(processes=len(my_queries))
pool.map(partial(execute_query,rs_conn_string), my_queries)

有什么办法使它起作用吗?如果一个查询失败而另一个查询回滚,是否可以在同一个“事务”中运行3个查询?

一个明显的问题是,您总是运行
pool.map
,不仅在主进程中,而且在并行子进程中使用的解释器导入脚本时也是如此。您应该这样做:

def run_all():
将池(processs=len(my_querys))作为池:
map(部分(执行\u查询、rs\u连接\u字符串、我的\u查询)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
全速前进
关于你的第二个问题,这是不可能的,因为事务是每个连接的,如果你这样做的话,每个连接位于不同的进程中

异步命令处理可能是您想要的,但PyGreSQL不支持它可能更适合做那样的事情