我在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()
如何使用Python和psycopg2同时执行三个REFRESH MATERIALIZED VIEW
语句?
答案 0 :(得分:1)
您可以使用多处理池,请检查文档here。并检查以下示例
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()