LINUX.ORG.RU

В скрипте несколько вызовов datetime.now() выдает одинаковое время

 


0

1

Хочу использовать модуль питона в логах. Урезаная версия:

from datetime import datetime

print "Datetime: %s"  %datetime.now()
print "Hello world!"
print "Datetime: %s"  %datetime.now()

Выхлоп:

Datetime: 2021-06-20 22:21:39.796000
Hello world!
Datetime: 2021-06-20 22:21:39.796000

Вместо хелловорда поставьте тяжелую задачу, сборка буста например. Чяднт?



Последнее исправление: zanac1 (всего исправлений: 1)
Ответ на: комментарий от vvn_black

Я думаю, вопрос как раз в том, почему у него воспроизводится.

anonymous
()
Ответ на: комментарий от anonymous

Так работает, странно. Собрал мелкий модуль - работает. Х.з. Может от многопоточности глючит…

zanac1
() автор топика
Ответ на: комментарий от zanac1

Так в твоем примере нет многопоточности, наверное надо пример кода с ней показывать.

anonymous
()
Ответ на: комментарий от zanac1

на винде

Там же вроде как точность получения времени плюс-минус дохрена. В жабе например System.currentTimeMillis() даёт очень плохие результаты. Попробуй более специализированные методы, если они есть.

ya-betmen ★★★★★
()

Чяднт?

Использование устаревшего питона и замер времени выполнения печати одной строчки.

Это бессмыслица какая-то.

fornlr ★★★★★
()

вставь между вызовами datetime.now

time.sleep(2)

посмотри изменится ли что-то. А у меня этот пример выдаёт разное время.

qx255
()
Последнее исправление: qx255 (всего исправлений: 1)
>>> def my_time():
...     print( datetime.datetime.now())
...     print('waFGVAWGVA')
...     print( datetime.datetime.now())
...
>>> my_time()
2021-06-21 09:55:42.758917
waFGVAWGVA
2021-06-21 09:55:42.758917
>>>

хм, воспроизводится

Morin ★★★★
()

иииии, можно :)

>>> import timeit
>>> timeit.default_timer()
1365.166766
>>> def my_time():
...     print(timeit.default_timer())
...     print('rrrrr')
...     print(timeit.default_timer())
...
>>> my_time()
1410.1987642
rrrrr
1410.1994152
Morin ★★★★
()

Получение текущего времени - очень частая операция. Делать сисколл каждый для этой цели каждый раз - дорого. Поэтому для gettimeofday текущее время хранится в шаренной странице памяти и периодически обновляется ядром. Для точного времени есть другие вызовы.

slovazap ★★★★★
()
Ответ на: комментарий от zanac1

@maxcom или кого тут нынче надо звать-то… баг в маркдауне :)

не надо пытаться найти токены форматирования внутри урла (там было /__init__.py)

(в сообщении, на которое я отвечаю)

aol ★★★★★
()
Последнее исправление: aol (всего исправлений: 2)
Ответ на: комментарий от zanac1

смотрел в build_mmp(only_begotten_engine) ? там только треды создаются, что быстро, а ты где-то в другом месте ждёшь, чтобы они отработали - вот после него и ставь datetime.now() про точность datetime.now() уже другие умные люди сказали

eta
()
Ответ на: комментарий от ya-betmen

Там же вроде как точность получения времени плюс-минус дохрена.

Шаг около 16 мс если точнее. Можно глобально повысить точность с помощью специального API, не уверен что в Питоне оно есть.

X512 ★★★★★
()
Ответ на: комментарий от slovazap

Делать сисколл каждый для этой цели каждый раз - дорого.

Поэтому для этого есть команда/регистр процессора. В шаренной странице памяти можно хранить только смещение между процессорным регистром монотонного таймера и текущего календарного времени. В Haiku так сделано.

X512 ★★★★★
()
Последнее исправление: X512 (всего исправлений: 1)

Если тебе это дело вдруг понадобилось для того, чтобы измерить время исполнения чего-нибудь, то правильно это делать через monotonic clock.

theNamelessOne ★★★★★
()
Ответ на: комментарий от eta

В init.py(убрал знаки подчеркивания) замеряется время выполнения всей сборки. Многопоточная сборка идет в piper.py. Позже добавлю сборку собственно exe.

zanac1
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.