我们如何将psycopg2连接池对象传递给processpoolexecutor python

问题描述 投票:0回答:1

我有一个 csv 文件列表,需要将数据加载到 postgres 表中。 我尝试使用 processpoolexecutor 并将连接池作为参数传递给 loadcsv 函数。 提交函数时出现类似 TypeError 的错误。

等待时出现 TypeError,程序被挂起。 让我知道是否有人遇到同样的问题以及如何解决同样的问题。

请让我知道更快加载文件的更好方法。

def load_csv_file(file_path, connection, semaphore):
    with open(file_path, "r") as csvfile:
        reader = csv.reader(csvfile)
        for row in reader:
            try:
                semaphore.acquire()
                connection.cursor().execute(
                    """
                    INSERT INTO table (column1, column2, column3)
                    VALUES (%s, %s, %s)
                    """,
                    row,
                )
            finally:
                semaphore.release()
def main():
    # Create a connection pool
    connection_pool = ThreadedConnectionPool(
        max_conn=10,
        host="localhost",
        port=5432,
        dbname="my_database",
        user="my_user",
        password="my_password",
    )

with ProcessPoolExecutor(max_workers=10) as executor:
        # Load the CSV files to the table
        for file_path in ["file1.csv", "file2.csv", "file3.csv"]:
            executor.submit(
                load_csv_file,
                file_path,
                connection_pool.getconn(),
                semaphore=semaphore,
            )
python-3.x psycopg2
1个回答
0
投票

你只能传递可以腌制的对象,我认为这是行不通的。我目前正在寻找解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.