在Python中显示pool.map操作的进度
我在处理一个很长的独立且耗时的操作列表时,使用了 multiprocessing
里的 pool.map
方法,具体情况可以参考我之前的问题 如何在Python中将许多独立的耗时操作分配到多个核心上。
即使使用了多个核心,这些工作仍然可能需要几个小时才能完成。我想给操作的进度提供一些简单的视觉提示。为了尝试这个,我在映射函数中打印了列表中每个项目的ID号,但遇到了两个问题:1)在集成开发环境(IDE)中,直到所有操作完全完成后,这些信息才会显示出来(这不是太麻烦),2)操作的完成顺序是随机的(这就比较麻烦了)。
那么,有什么好的方法可以解决这个问题呢?
1 个回答
0
from threading import *
from time import sleep
class worker(Thread):
def __init__(self, params = None):
Thread.__init__(self)
self.params = params
self.status = 0.0
self.start()
def run(self):
while self.status < 1.0:
# <--- This would be where you execute
# your demanding/costly operations
# Also, update your status (progress)
self.status += 0.1
sleep(0.1)
x = worker()
y = worker()
while x.status < 1.0 and y.status < 1.0:
print 'X status:', x.status
print 'Y status:', x.status
注意:这个1.0的计数限制只是为了给你演示用。在实际操作中,你可以让线程一直活着,使用一个无限循环,或者让run()这个函数完成你的计算,然后在获取到你想要的值后结束,这个值可以像self.status
变量那样存储。