在我所研究的领域中,通常程序响应需要在ns级别精度处理。这就造成了一个问题,即默认的时间戳精度是秒级的。
```python
import time
timestamp = time.time()
print(round(timestamp, 6))
然而,这种只能是打印出最大6位数的时间戳。
所以,纳秒精度处理只能需要datetime和time来组合使用
import datetime
now = datetime.datetime.now()
print(now)
所得结果为
2025-04-18 16:10:11.282009
如果需要纳秒级时间戳,则考虑
import datetime
import time
now = datetime.datetime.now()
ns_timestamp = int(time.clock_gettime(time.CLOCK_REALTIME_NS))
print(now)
print(ns_timestamp)
其中,time.clock_gettime()函数获取了纳秒级的时间戳。
关键的是时间间隔计算,timedelta对象的精度只能到达ms级,但是不能到ns级。
实例应用
程序执行时间
import time
start_time = time.clock_gettime(time.CLOCK_MONOTONIC_RAW)
# 执行一段需要测量的代码
for i in range(1000000):
pass
end_time = time.clock_gettime(time.CLOCK_MONOTONIC_RAW)
execution_time = end_time - start_time
print(f"程序执行时间:{execution_time} 秒")
纳秒级定时任务(高频交易系统)
```python
import time
def task():
print("执行定时任务")
def nanosecond_timer(interval):
start_time = time.clock_gettime(time.CLOCK_MONOTONIC_RAW)
while True:
# time_clock_gettime是获取纳秒级的时间戳
current_time = time.clock_gettime(time.CLOCK_MONOTONIC_RAW)
elapsed_time = current_time - start_time
if elapsed_time >= interval:
start_time = current_time
task()
# 降低CPU占用率
time.sleep(1e-9)
nanosecond_timer(1e-9) # 每纳秒执行一次定时任务
```
其中,为了在每次循环中加入time.sleep()函数,使线程暂停1ns,可以减少循环的执行次数,提高系统性能。