【问题标题】:Visual Studio Code Python debugger running significantly slower when using random.uniform() compared with random.random()与 random.random() 相比,使用 random.uniform() 时 Visual Studio Code Python 调试器的运行速度要慢得多
【发布时间】:2020-07-02 21:24:13
【问题描述】:

我的 Python 版本是 3.8.2,我使用 Visual Studio Code 1.43.1 编写代码。 我正在使用蒙特卡洛方法估计 pi ​​的值。

事实证明,当我使用 random.random() 生成随机数时,在发布模式下大约需要 1.4 秒,在调试器中大约需要 1.6 秒。但是当我将 random.random() 切换到 random.uniform(0,1) 时,在发布模式下大约需要 1.9 秒,在调试器中大约需要 6.5 秒。

我想运行时间会增加是合理的,因为每次生成一个数字,uniform函数都会做一次额外的计算。但是为什么发布模式只增加了一点点,而在调试器中使用的时间却增加了近 3 倍呢?这种现象背后的机制是什么?还是我的调试器有问题?

我的代码如下所示。我已经删除了调试器中的所有断点。由于我是 Python 的初学者,所以我没有对设置做太多改动。

from random import random,uniform
from time import perf_counter
LEN=1000000
COUNT=0
start=perf_counter()
for i in range(LEN):
    x,y=uniform(0,1),uniform(0,1)  #switch between random() and uniform(0,1)
    dist=pow(x**2+y**2,0.5)
    if dist<=1.0:
        COUNT+=1
pi=4*COUNT/LEN
end=perf_counter()
print("pi={:10f}".format(pi))
print("time consumed:{:f}".format(end-start))

【问题讨论】:

  • 请注意,uniformrandom 多了两个参数。也许调试器存储和维护参数的开销解释了时间差异。
  • 这可能与 random.uniform 是您调用的唯一用 Python 而不是 C 实现的事实有关,因此它是调试器唯一可以在您编写的部分之外实际调试的东西.
  • 我自定义了一个与uniform定义相同的新函数。这次它的运行速度与使用内置的uniform 一样慢。它是否确认是开销中添加的两个参数产生了影响?@PeterO.
  • 对不起,我不太明白 vscode Python 调试器和 C 之间的关系。你能告诉我更多关于那个或在哪里可以找到相关信息的信息吗? @user2357112支持莫妮卡
  • 我也用 C 语言编写了这个程序,并使用 gdb 作为调试器。 (为了获得相应的运行时间,我将循环大小增加到 50000000。)这次使用 gdb 并没有像 Python 调试器那样增加运行时间。鉴于此,我想知道添加 2 个参数可以产生如此巨大的变化这一事实是否是这种特定 python 调试器或 python 语言本身的固有特性?@PeterO。

标签: python random vscode-debugger


【解决方案1】:

也许可以试试 pypy 和 Visual Studio Code Python 扩展,它可以提高 Python 调试器的性能。

【讨论】:

  • 你能解释一下这个问题吗?
猜你喜欢
  • 1970-01-01
  • 2011-08-07
  • 1970-01-01
  • 2014-03-29
  • 2011-03-22
  • 1970-01-01
  • 1970-01-01
  • 2020-02-28
  • 1970-01-01
相关资源
最近更新 更多