【问题标题】:Timing function in python not giving accurate resultpython中的计时功能没有给出准确的结果
【发布时间】:2010-06-28 12:01:20
【问题描述】:

我已经开发了一个签密方案,我想测试模幂运算所花费的时间。我正在使用以下代码进行签密部分

start = time.clock()
gamma  =    pow(g , x, p)
print ('The value of gamma is : '),gamma
Time_signcrypt = time.clock() - start

对于 unsigncryption 部分,我正在计算这行代码所花费的时间

start = time.clock()
seed =  (XA + x - XA) 
gamma_new = pow(g , seed, p)
Time_new_gamma = time.clock() - start

问题是使用相同的值,我从两个计时函数得到的结果是不同的。

Signcryption values: 
0.035299674 
0.025940017 

Unsigncryption values: 
0.019342944
0.01727206

值应该相同,因为相同的函数在两端应用相同的参数。另一件重要的事情是,在 unsigncryption 部分,增加了一个步骤,但所花费的时间仍然少于 signcryption 部分。我不明白出了什么问题我已经测试了将近 35 次,结果大部分时间都不同:(

请指教我哪里出错了?

【问题讨论】:

标签: python timing


【解决方案1】:

要计时方法,请多次运行它们,直到累计时间至少 10 秒,然后将时间除以运行次数。

否则,由于各种原因,时间会很不准确:

  1. 获得 CPU 的其他进程
  2. 在后台运行的中断
  3. 热效应
  4. 宇宙辐射
  5. 你明白了.. ;-)

【讨论】:

  • 你能告诉我原因吗,因为我只计算一个简单的 pow () 函数的时间,它只是一行,在 unsigncryption 部分发生了同样的事情,但两个输出仍然不同. signcryption 和 unsigncryption 的值也变化很大,但每个 signcryption/unsigncryption 部分中的值更接近。我从早上开始就一直在测试这些值,现在没有运气:S :(
【解决方案2】:

有一个timeit 模块可以做这种事情。它会多次运行您的代码(默认为 100 万次)并报告该运行的统计信息。比尝试为单次运行计时要准确得多,因为您的代码可能会遇到各种问题。

【讨论】:

    【解决方案3】:

    因为 CPU 不断在不同进程之间进行调度,所以每次执行同一段代码都会花费不同的时间。

    第一个函数通常会比较慢,因为 print 语句需要“相当长”的时间。

    【讨论】:

      猜你喜欢
      • 2020-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多