Resolución Python de datetime.now ()

from datetime import datetime import time for i in range(1000): curr_time = datetime.now() print(curr_time) time.sleep(0.0001) 

Estaba probando la resolución de datetime.now() . Como se supone que la salida es en microsegundos, esperaba que cada impresión fuera diferente.

Sin embargo, siempre consigo algo así.

 ... 2015-07-10 22:38:47.212073 2015-07-10 22:38:47.212073 2015-07-10 22:38:47.212073 2015-07-10 22:38:47.212073 2015-07-10 22:38:47.212073 2015-07-10 22:38:47.212073 2015-07-10 22:38:47.212073 2015-07-10 22:38:47.212073 2015-07-10 22:38:47.212073 2015-07-10 22:38:47.212073 2015-07-10 22:38:47.212073 2015-07-10 22:38:47.212073 2015-07-10 22:38:47.212073 2015-07-10 22:38:47.213074 2015-07-10 22:38:47.213074 2015-07-10 22:38:47.213074 2015-07-10 22:38:47.213074 2015-07-10 22:38:47.213074 2015-07-10 22:38:47.213074 2015-07-10 22:38:47.213074 2015-07-10 22:38:47.213074 2015-07-10 22:38:47.213074 2015-07-10 22:38:47.213074 2015-07-10 22:38:47.213074 ... 

¿Por qué sucede eso? ¿Hay alguna manera de que pueda obtener una marca de tiempo precisa hasta el microsegundo? En realidad no necesito microsegundos, pero sería bueno obtener una resolución de 0.1 ms.

=== ACTUALIZACIÓN ====

Lo comparé con el uso de time.perf_counter () y la adición a la datetime y datetime inicio desde la fecha y datetime de la fecha y hora de importación.

 datetime0 = datetime.now() t0 = time.perf_counter() for i in range(1000): print('datetime.now(): ', datetime.now()) print('time.perf_counter(): ', datetime0 + timedelta(0, time.perf_counter()-t0)) print('\n') time.sleep(0.000001) 

No estoy seguro de qué tan ‘preciso’ es realmente, pero la resolución es al menos más alta … no parece importar ya que mi computadora ni siquiera puede imprimir a una velocidad tan alta. Para mi propósito, que simplemente necesito diferentes marcas de tiempo para distinguir diferentes entradas, esto es lo suficientemente bueno para mí.

 ... datetime.now(): 2015-07-10 23:24:18.010377 time.perf_counter(): 2015-07-10 23:24:18.010352 datetime.now(): 2015-07-10 23:24:18.010377 time.perf_counter(): 2015-07-10 23:24:18.010545 datetime.now(): 2015-07-10 23:24:18.010377 time.perf_counter(): 2015-07-10 23:24:18.010745 datetime.now(): 2015-07-10 23:24:18.011377 time.perf_counter(): 2015-07-10 23:24:18.010961 datetime.now(): 2015-07-10 23:24:18.011377 time.perf_counter(): 2015-07-10 23:24:18.011155 datetime.now(): 2015-07-10 23:24:18.011377 time.perf_counter(): 2015-07-10 23:24:18.011369 datetime.now(): 2015-07-10 23:24:18.011377 time.perf_counter(): 2015-07-10 23:24:18.011596 datetime.now(): 2015-07-10 23:24:18.012379 time.perf_counter(): 2015-07-10 23:24:18.011829 datetime.now(): 2015-07-10 23:24:18.012379 time.perf_counter(): 2015-07-10 23:24:18.012026 datetime.now(): 2015-07-10 23:24:18.012379 time.perf_counter(): 2015-07-10 23:24:18.012232 datetime.now(): 2015-07-10 23:24:18.012379 time.perf_counter(): 2015-07-10 23:24:18.012424 datetime.now(): 2015-07-10 23:24:18.012379 time.perf_counter(): 2015-07-10 23:24:18.012619 datetime.now(): 2015-07-10 23:24:18.013380 time.perf_counter(): 2015-07-10 23:24:18.012844 datetime.now(): 2015-07-10 23:24:18.013380 time.perf_counter(): 2015-07-10 23:24:18.013044 datetime.now(): 2015-07-10 23:24:18.013380 time.perf_counter(): 2015-07-10 23:24:18.013242 datetime.now(): 2015-07-10 23:24:18.013380 time.perf_counter(): 2015-07-10 23:24:18.013437 datetime.now(): 2015-07-10 23:24:18.013380 time.perf_counter(): 2015-07-10 23:24:18.013638 datetime.now(): 2015-07-10 23:24:18.014379 time.perf_counter(): 2015-07-10 23:24:18.013903 datetime.now(): 2015-07-10 23:24:18.014379 time.perf_counter(): 2015-07-10 23:24:18.014125 datetime.now(): 2015-07-10 23:24:18.014379 time.perf_counter(): 2015-07-10 23:24:18.014328 datetime.now(): 2015-07-10 23:24:18.014379 time.perf_counter(): 2015-07-10 23:24:18.014526 datetime.now(): 2015-07-10 23:24:18.014379 time.perf_counter(): 2015-07-10 23:24:18.014721 datetime.now(): 2015-07-10 23:24:18.015381 time.perf_counter(): 2015-07-10 23:24:18.014919 ... 

Esto puede ser una limitación de time.sleep en su sistema, en lugar de datetime.now() … o posiblemente ambos. ¿Qué sistema operativo y qué versión y distribución de Python está ejecutando?

Es posible que su sistema no ofrezca la “precisión de subsegundo” mencionada en los documentos de time.sleep :

 sleep(...) sleep(seconds) Delay execution for a given number of seconds. The argument may be a floating point number for subsecond precision. 

En Linux 3.x en amd64 con CPython 2.7 , obtengo algo muy parecido a los 0.0001 pasos de tiempo que pretendías:

 2015-07-10 19:58:24.353711 2015-07-10 19:58:24.353879 2015-07-10 19:58:24.354052 2015-07-10 19:58:24.354227 2015-07-10 19:58:24.354401 2015-07-10 19:58:24.354577 2015-07-10 19:58:24.354757 2015-07-10 19:58:24.354938