敏捷编程笔记(2):ns级时间处理

在我所研究的领域中,通常程序响应需要在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,可以减少循环的执行次数,提高系统性能。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注