我实现pool.map
了multiprocessing
一长串独立且非常昂贵的操作,如我之前的问题中所述,在 python 的多个核心上分发许多独立的、昂贵的操作。
即使有多个内核,这项工作也可能需要几个小时。我想提供一些关于操作进度的简单视觉提示。为了进行实验,我尝试从映射函数中打印列表中每个项目的 ID 号,但 1)在 IDE 中,直到所有操作完全完成(问题较少)才会显示,2)操作未完成按顺序(更成问题)。
解决这个问题的最佳方法是什么?
我实现pool.map
了multiprocessing
一长串独立且非常昂贵的操作,如我之前的问题中所述,在 python 的多个核心上分发许多独立的、昂贵的操作。
即使有多个内核,这项工作也可能需要几个小时。我想提供一些关于操作进度的简单视觉提示。为了进行实验,我尝试从映射函数中打印列表中每个项目的 ID 号,但 1)在 IDE 中,直到所有操作完全完成(问题较少)才会显示,2)操作未完成按顺序(更成问题)。
解决这个问题的最佳方法是什么?
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
变量的方式。