在python中显示pool.map操作的进度

时间:2013-02-06 18:28:38

标签: python multiprocessing

我为pool.map multiprocessing实施了一长串独立且非常昂贵的操作,如上一个问题Distribute many independent, expensive operations over multiple cores in python中所述。

即使有多个内核,这项工作也可能需要几个小时。我想提供一些操作进度的简单视觉提示。为了进行实验,我尝试在映射函数中打印列表中每个项目的ID号,但是1)在IDE中,直到所有操作完全完成(问题较少)才显示,并且2)操作未完成按顺序(更有问题)。

最好的解决方法是什么?

1 个答案:

答案 0 :(得分: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计数器限制只是为了给你一个演示。 在实际操作中,你只需要让线程永远存在,并使用enldess循环,或者你有run()函数进行计算,然后在你检索到你想要存储在同一个值中的所需值后死掉self.status变量的方式。