我有一个 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,
)
你只能传递可以腌制的对象,我认为这是行不通的。我目前正在寻找解决方案。