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

1 投票
1 回答
764 浏览
提问于 2025-04-17 15:00

我在处理一个很长的独立且耗时的操作列表时,使用了 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变量那样存储。

撰写回答