使用大文件进行高效的多处理/多线程

时间:2017-03-06 01:46:33

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

我有两个大型数据集,我需要对其进行反对:

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

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

如何才能提高效率?当我在内存中维护单个项目并且只是引用它但我不确定如何这样做时,我觉得好像我有太多的进程和内存中的完整数据集。有关如何提高效率的任何提示都会有所帮助。谢谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您可能希望了解如何使用标准的unix工具。如果您要查找常见项或缺失项,请注意comm(又名calm)和join命令。它们是专门用C语言构建的。