我有一些运行数学模拟的代码,并将其计时。
当我在没有多线程的情况下运行此代码时,时序代码完全正常。
当我使用多线程运行代码时;时间过小是非常小的 - 使用手表,我估计它比实际代码运行的时间快大约4-8倍。 (代码需要大约12秒才能运行,time
模块需要1.5-2.5秒)
简化代码:(控制流程将在下面详细说明)
class GenX:
def log_results(self, solver):
time2 = time.clock()
print '%0.3f' % time2 - self.time1
^
##### this value is incorrect ###########
def __init__(self):
self.time1 = time.clock()
mySimulation.setup()
mySimulation.OnceCompleteCall(log_results)
## (in reality both setup and start are more complicated)
def optimize(self):
mySimulation.start()
return
我有另一个实例化这个GenX类的类,然后运行GenX.optimize(),开始模拟。
模拟是一个单独的模块,它在内部处理线程代码(它也是一个1000行类,其中大约50%是不必要的getter / setter ......所以我认为作者很可能是问题的根源)< / p>
模拟完成后,它会调用log_results,它会计算所需的时间 - 这是不正确的。
目前我不知道错误的来源是我的代码还是我正在使用的模块。
我已经检查过模块的作者在完成并行操作时调用pool.join()
- 它会被调用但是时间仍然不正确。
答案 0 :(得分:1)
根据您拥有的线程数,CPU一次处理的线程数以及线程正在执行的操作,我认为这与以下问题有关:https://codereview.stackexchange.com/a/26669。可能是因为时钟只是测量处理时间而不是测量时间,所以你获得的值低于你期望的值。
尝试使用time.time()代替。