使用 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
。
在 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
。