python - 如何在 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 同时执行三个语句?
解决方案
您可以使用多处理池,请在此处查看文档。并检查以下示例
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()
推荐阅读
- python - 使用日期/日期时间无法使用 Pandas 创建新系列
- flutter - 为什么 ModalRoute 返回 null?
- admob - 很长一段时间后,admob 横幅从未开始显示。只有测试横幅有效
- reactjs - 内容安全策略指令块动态加载的内联脚本
- r - 使用 ggplot 在保持抖动的同时更改组内点的颜色
- c++ - 使用协程从 epoll_wait 处理事件的多线程
- python - 如何在某些字段中聚合具有相同值的多个对象?
- javascript - 如何在 jquery 中动态添加的按钮上创建工作按钮?
- python - 如何组织python文件,让导入不报ImportError:?
- twig - Twig Number Format 将 double 转换为 int