如何同时从多个不同来源阅读?

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

我正在从CSV_1,CSV_2和DB 1这3个数据源中提取数据。CSV_1和CSV_2具有不同的架构和编码。我正在使用pandas.read_csv读取从数据库中提取的CSV pandas.read_sql。我是并发/并行的新手,但据我所知,由于IO是我在这里的约束,因此多线程可以帮助我提高速度。

我以为我可以使用concurrent.futures.ThreadPoolExecutor及其map方法来并行读取csv,就像这样:

files = ['csv_1.csv', 'csv_2.csv']

with ThreadPoolExecutor(2) as executor:
    results = executor.map(pd.read_csv, files)

但是根据我所见,因为我需要将不同的参数应用于read_csv(即编码和dtypes),因此无法正常工作。有没有一种方法可以对每个可迭代对象使用具有不同参数的相同函数?仅此部分,异步读取需要不同pd.read_csv参数的两个不同的csv将是一个巨大的胜利。

理想情况下,我还要添加一个从数据库读取的第三个线程。

有没有办法做到这一点?

python multithreading python-multithreading concurrent.futures
2个回答
1
投票

有几种方法可以做到。您只需要一个临时函数即可,该函数知道如何将map使用的单个参数扩展为所需的调用。在第一个示例中,您可以具有一些固定类型。很好,因为可以轻松查看每种类型所需的参数


0
投票

tdelaney的完整答案涵盖了您所提出的问题,但是要提出另一个建议,如果您可以控制文件的创建,那么从CSV迁移为存储格式可能会带来更大的变化。

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