使用zip函数时,Python3 Multiprocessing并不是所有可迭代的

时间:2015-03-18 00:53:42

标签: python-3.x multiprocessing

我有一个简单的功能

@click.command()
@click.option('--concurrency', default=multiprocessing.cpu_count(), help='The maximum requests to make to the server')
@click.option('--file', prompt='File Location: ', type=click.File(encoding="utf8"),
              help='The File to load')
    def try_pool(file, concurrency):
        pool = multiprocessing.Pool(concurrency)
        pool.map(print, zip(file, [1]*3000) )
        pool.close()

    def simple_print(file)
        for i in zip(file, [1]*3000):
            print(i)


    if __name__ == "__main__":
        load_service()

该文件仅包含2879个条目。 如果我使用simple_print函数,我得到以下(多次尝试)

python3 Test.py input.txt | wc -l
    2879

但是,如果我多次使用try_pool,有时我会得到2879,有时候得到2519,有时候是2430.

我想知道多处理模块发生了什么。我使用的python版本是Python 3.4.3

1 个答案:

答案 0 :(得分:0)

刚刚找到答案。

显然调用pool.close()不足以使池处理所有请求。必须跟在pool.join()之后才能等待池完成。

def try_pool(file, concurrency):
    pool = multiprocessing.Pool(concurrency)
    pool.map(print, zip(file, [1]*3000) )
    pool.close()
    pool.join()

现在我真的希望将这两种方法合二为一,这样就不会像我那样造成愚蠢的错误。