首页 > 解决方案 > 如何在 Python/psycopg2 中同时执行多个独立语句?

问题描述

我在 PostgreSQL 中有三个物化视图需要很长时间才能刷新(每个都超过几个小时),我需要每天刷新它们。

我目前正在使用 Python 脚本执行此操作,该脚本一个接一个地刷新视图,但与在 pgAdmin 中手动刷新它们相比,它需要三倍的时间(我可以在不同的选项卡中同时运行所有三个刷新)。

这就是我的代码现在的样子:

import psycopg2
config = {'connection details'}
conn = psycopg2.connect(**config)
cur = conn.cursor()

# This is the part that I want to run simultaneously
cur.execute('REFRESH MATERIALIZED VIEW gsam.mv_hist_wip_data')
cur.execute('REFRESH MATERIALIZED VIEW gsam.mv_hist_ver_data')
cur.execute('REFRESH MATERIALIZED VIEW gsam.mv_hist_verda_data')

conn.close()

如何REFRESH MATERIALIZED VIEW使用 Python 和 psycopg2 同时执行三个语句?

标签: pythonpsycopg2

解决方案


您可以使用多处理池,请在此处查看文档。并检查以下示例

import psycopg2
from multiprocessing import Pool

def main():
    p = Pool(processes=3)
    view_names = ['mv_hist_wip_data','mv_hist_ver_data', 'mv_hist_verda_data']
    result = p.map(refresh_view, view_names)

def  refresh_view(view_name):

    config = {'connection details'}
    conn = psycopg2.connect(**config)
    cur = conn.cursor()
    # This is the part that I want to run simultaneously
    cur.execute('REFRESH MATERIALIZED VIEW gsam.%s', (view_name,))
    conn.close()

推荐阅读