Отладчик Visual Studio Code Python работает значительно медленнее при использовании random.uniform() по сравнению с random.random()

Моя версия Python — 3.8.2, и я использую Visual Studio Code 1.43.1 для написания своего кода. Я оцениваю значение числа пи, используя метод Монте-Карло.

Оказывается, когда я использую 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))

person Meneshail    schedule 22.03.2020    source источник
comment
Обратите внимание, что uniform принимает на два параметра больше, чем random. Возможно, накладные расходы на хранение и поддержку параметров отладчиком объясняют разницу во времени.   -  person Peter O.    schedule 22.03.2020
comment
Вероятно, это связано с тем, что random.uniform — это единственная вещь, которую вы вызываете и которая реализована на Python, а не на C, так что это единственная вещь, которую отладчик может реально отлаживать за пределами написанных вами частей.   -  person user2357112 supports Monica    schedule 22.03.2020
comment
Я самостоятельно определил новую функцию с тем же определением, что и uniform. На этот раз он работает так же медленно, как при использовании встроенного uniform. Подтверждает ли это, что разница заключается в двух параметрах, добавленных в служебные данные? @PeterO.   -  person Meneshail    schedule 22.03.2020
comment
Извините, но я не совсем понимаю взаимосвязь между отладчиком vscode Python и C. Не могли бы вы рассказать мне об этом немного больше или где найти соответствующую информацию? @user2357112supportsМоника   -  person Meneshail    schedule 22.03.2020
comment
Я также написал эту программу на C и использовал gdb в качестве отладчика. (Чтобы получить соизмеримое время выполнения, я увеличил размер цикла до 50000000.) На этот раз использование gdb не увеличило время выполнения, как это сделал отладчик Python. В связи с этим мне интересно, является ли тот факт, что добавление двух параметров может привести к таким значительным изменениям, врожденной характеристикой этого конкретного отладчика Python или самого языка Python? @PeterO.   -  person Meneshail    schedule 22.03.2020


Ответы (1)


Возможно, попробуйте pypy с расширением python кода Visual Studio, это может улучшить производительность отладчика python.

person Jerome Chung    schedule 15.07.2020
comment
Не могли бы вы объяснить проблему? - person Helper; 15.07.2020