使用 Process.Pool 跟踪进度

Keeping track of progress using Process.Pool

for 循环中,通过执行以下操作很容易跟踪进度:

total_num = 1000
for num, url in enumerate(urls):
    print '%s / %s' (num+1, total_num)
    # do something

我如何跟踪使用 Pool 的进度?

# input data has 4M items
pool = Pool(parallel_workers)
pool.map(run_item, input_data)

一个非常基本的近似方法是拥有一个全局变量,然后在整个过程中确定它的大小。这是一个例子:

global progress
progress = set()

def run_item(input_data):
    progress.add(url)
    print len(progress) * parallel_workers

查看此问题的答案。我想这就是你想要的。

本质上,您应该使用迭代 map 或异步 map