我有一个简单的功能
@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
答案 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()
现在我真的希望将这两种方法合二为一,这样就不会像我那样造成愚蠢的错误。