Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python/psycopg2中同时执行多个独立语句?_Python_Psycopg2 - Fatal编程技术网

如何在Python/psycopg2中同时执行多个独立语句?

如何在Python/psycopg2中同时执行多个独立语句?,python,psycopg2,Python,Psycopg2,我在PostgreSQL中有三个物化视图,刷新它们需要很长时间(每个视图都需要几个小时以上),我需要每天刷新它们 目前,我正在使用一个Python脚本逐个刷新视图,但与在pgAdmin中手动刷新视图相比,这需要三倍的时间(在pgAdmin中,我可以在不同的选项卡中同时运行所有三次刷新) 这就是我的代码现在的样子: import psycopg2 config = {'connection details'} conn = psycopg2.connect(**config) cur = conn

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

目前,我正在使用一个Python脚本逐个刷新视图,但与在pgAdmin中手动刷新视图相比,这需要三倍的时间(在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
语句

您可以使用多处理池。请检查文档。并检查下面的示例

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()

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

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()

非常感谢。您的解决方案非常有效!我唯一需要更改的是
defmain():
,因为它抛出了一个错误。它应该是
如果uuuu name\uuuuu=='\uuuuu main\uuuuuuu':
谢谢!您的解决方案非常有效!我唯一需要更改的是
defmain():
,因为它抛出了一个错误。如果uuu name uuuu=='\uuuuuu main uuuu':