首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用并行模块时Python计时代码不正确-我的代码还是模块?

调用并行模块时Python计时代码不正确-我的代码还是模块?
EN

Stack Overflow用户
提问于 2014-02-04 18:10:02
回答 1查看 627关注 0票数 2

我有一些运行数学模拟的代码,并对其进行了多次计算。

当我在没有多线程的情况下运行这段代码时,计时代码工作得非常好。

当我使用多线程运行代码时,时间不合理--使用手表,我估计它比运行实际代码所需的时间快4-8倍。(代码运行大约需要12秒,time模块说是1.52.5秒)

简化代码:(控制流在下面稍详细地解释)

代码语言:javascript
复制
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/setters.因此,我认为作者很可能是问题的根源)

一旦模拟完成,它将调用log_results,它计算所需时间--这是不正确的。

目前,我不知道bug的来源是我的代码还是我正在使用的模块。

我已经检查了模块的作者在完成并行操作时调用了pool.join() --它确实被调用了,但是时间仍然不正确。

EN

回答 1

Stack Overflow用户

发布于 2014-11-04 16:42:08

根据您有多少线程,一次处理多少个线程,以及线程在做什么,我假设这与以下问题有关:https://codereview.stackexchange.com/a/26669。这可能是因为时钟只是在测量处理时间,而不是壁时间,因此得到的值比您预期的要低。

尝试使用time.time()代替。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21560111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档