Я понимаю, что time.sleep () вызывает таймер ОС и может немного отличаться (как указывает ответ ), но я вижу очень большое время задержки в Ipython.Кажется, это происходит только после того, как я импортировал matplotlib.pyplot.Затем сразу после ожидания около 30 секунд начинает отставать.Чтобы привести рабочий пример, попробуйте ввести iPython:
>>import matplotlib.pyplot as plt
# after 30 seconds
>>%time time.sleep(1)
CPU times: user 5.27 ms, sys: 3.58 ms, total: 8.85 ms
Wall time: 11 s
Использование более продолжительного времени в спящем режиме, по-видимому, имеет аддитивный эффект:
>>%time time.sleep(3)
CPU times: user 4.75 ms, sys: 3.7 ms, total: 8.45 ms
Wall time: 13 s
Время от времени настенное время подходит, нотолько около 1/10 времени.Я также попытался поместить сна в функцию следующим образом:
>>def test():
start = time.time()
for i in range(4):
time.sleep(1)
print(f'{time.time() - start}')
>>test()
11.000279188156128
22.000601053237915
33.000962018966675
44.001291036605835
Это также иногда показывает меньшие временные шаги, но это обычный вывод.Я также поместил ту же функцию в отдельный файл и использовал% run script.py в iPython, с тем же результатом.Таким образом, это происходит каждый раз, когда вызывается time.sleep.
Единственное, что, по-видимому, работает: (а) не импортировать matplotlib.pyplot
или (б) определить функцию на основе простогоall-python timer:
>>def dosleep(t):
start = time.time()
while time.time() - start < t:
continue
>>%time dosleep(2)
CPU times: user 1.99 s, sys: 8.4 ms, total: 2 s
Wall time: 2 s
Последний пример кажется хорошим решением, но у меня есть приличный объем кода, который уже использует time.sleep (), и я хотел бы по-прежнему использовать Jupyter сядро Ipython.Есть ли способ определить, что его удерживает, или есть какие-нибудь советы, как уменьшить время задержки?Мне просто интересно, что это может вызвать.
Я нахожусь на Mac OS X 10.14.3, работающей на Python 3.6.8 (Anaconda).Моя версия Ipython - 7.3.0.Это работает так же для iPython 7.4.0.Версия matplotlib - 3.0.3.Проблема не возникает до тех пор, пока не будет взаимодействовать интерактивная система с графическим интерфейсом (это происходит сразу при импорте для matplotlib 3.x и при создании фигуры (plt.figure ()) с помощью matplotlib 2.x).Это происходит, когда в доке появляется значок «Python 3.6».