【问题标题】:Efficient multiprocessing/multithreading with large files大文件的高效多处理/多线程
【发布时间】:2017-03-06 01:46:33
【问题描述】:

我有两个充满哈希的大型数据集,我需要对其进行处理:

sample1(大约 15gb 大小):

    0000002D9D62AEBE1E0E9DB6C4C4C7C16A163D2C
    00000142988AFA836117B1B572FAE4713F200567
    000001BCBC3B7C8C6E5FC59B686D3568132D218C
    000001E4975FA18878DF5C0989024327FBE1F4DF

sample2(大约 5GB 大小):

    0000002D9D62AEBE1E0E9DB6C4C4C7C16A163D2C
    00000142988AFA836117B1B572FAE4713F200567
    000001BCBC3B7C8C6E5FC59B686D3568132D218C
    000001E4975FA18878DF5C0989024327FBE1F4DF

我目前正在尝试实现多处理,这两个文件都在一个目录中的另一组文件上进行迭代,如下所示:

if __name__ == '__main__':
    hash_path = glob2.glob(r'pathtohashes*.csv')
    sample1 = pd.read_csv(r'pathtosample1hashes.csv', names=['hash'])
    sample2 = pd.read_csv(r'pathtosample2hashes.csv', names=['hash'])
    for file in hash_path:
        jobs = []
        p = multiprocessing.Process(compare_function(file, sample1, sample2))
        jobs.append(p)
        p.start()

该函数将文件与示例文件进行比较并输出到目录。

如何提高效率?当我可以在内存中维护单个项目并仅引用它但不确定如何执行此操作时,我感觉好像我有太多的进程与内存中的完整数据集。有关如何提高效率的任何提示都会有所帮助。谢谢您的帮助。

【问题讨论】:

    标签: python multithreading python-3.x pandas multiprocessing


    【解决方案1】:

    您可能想研究使用标准的 unix 工具。如果您尝试查找常见或缺失的项目,请注意comm(又名calm)和join 命令。它们是专门用 C 语言构建的。

    【讨论】:

    • 我的函数中的比较因子做得很好,我需要能够扩展以扩展我的 hash_path 中的 5000 个文件
    • 你会受 CPU 限制还是 IO 限制?考虑到大量文件,我假设磁盘 IO 将成为瓶颈。
    • 我假设 CPU 受限。我需要调用这个函数多达 5000 次(5000 个较小的单独文件),我在一个 32gb 内存的四核主机上。我可能试图以错误的方式解决这个问题。该功能不仅仅是比较,它还有许多其他项目。此功能也通过 Windows 主机完成。据我了解,我只需要能够以某种方式在内存中引用这两个大文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-11
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 2016-01-13
    相关资源
    最近更新 更多