如何将单个对象文件分成多个迭代器

时间:2016-06-28 15:53:51

标签: python parallel-processing multiprocessing

有一个名为/tmp/largefile的大文件,我想逐行处理文件。我的想法如下:

                                       |---- Process-001 (largefile-part1)
                                       |
                                       |---- Process-002 (largefile-part2)
(largeefile) --> multiprocessing ----> |
                                       |---- Process-003 (largefile-part3)
                                       |
                                       |---- Process-004 (largefile-part4)

Process-00x将使用demo函数处理largefile的特殊部分。 demo是流程任务功能。

                                                   |-- [gevent worker001]
                                                   |
demo (Process func) ----> a part of largefile ---->|-- [gevent worker002]
                                                   |
                                                   |-- [gevent ....]

如何按进程号将单个目标文件拆分为多个迭代器?

#!/usr/bin/env python
# -*- coding: utf8 -*-

import multiprocessing


def worker(data):
    print(data.strip())
    return data


def demo(itertor):
    '''Parallel programming: Just demo here'''
    for _ in itertor:
        worker(_)
    return itertor


processes = []


f = open("/tmp/largefile")

for i in range(5):
    proc = multiprocessing.Process(target=demo, args=(f, ))
    processes.append(proc)

for process in processes:
    process.start()

for process in processes:
    process.join()

1 个答案:

答案 0 :(得分:0)

您可以使用itertools.tee返回2个迭代器副本

f = open("/tmp/largefile")

for i in range(5):
    f,f_copy = itertools.tee(f)
    proc = multiprocessing.Process(target=demo, args=(f_copy, ))
    processes.append(proc)

我猜......这可能不是你想要的......但它是你的问题所要求的