首页 > 解决方案 > Python多次返回相同时间戳的问题

问题描述

我正在使用一个 API,它使用回调函数每秒最多发送 2000 次数据。函数的主体获取数据参数(API 调用函数使用),附加时间戳(使用 datetime.now().timestamp()),然后将其发送到队列,它将保存在采集完成后的文件。

我面临的问题是我多次获得相同的时间戳,但数据不同。以下是一些已保存数据的示例:

数据-----时间戳

3258 1595943590.058758

3246 1595943590.058758

3246 1595943590.058758

3248 1595943590.058758

3254 1595943590.058758

3246 1595943590.058758

我尝试改用 time.time() ,但问题仍然存在:

2986 1595944140.3182354

2986 1595944140.3182354

2984 1595944140.3182354

2984 1595944140.3182354

2984 1595944140.3182354

2986 1595944140.3182354

2986 1595944140.3182354

2982 1595944140.3182354

2980 1595944140.3182354

2986 1595944140.3182354

API发送数据的速度太快以至于时间更新不够快的问题?有没有更准确的获取时间的方法?

#part of a class
def apiFunc(self, data):
        if data:
                d = (data, time.time())
                self.storage.put(d)
                return True
        return False

标签: pythontimestampreal-time

解决方案


也许将 的精度time.perf_counter与 的意义结合起来time.time。这是代码和输出(左边是纯time.time,右边是我的建议):

>>> if 1:
    import time
    delta = time.time() - time.perf_counter()
    timestamps = []
    for _ in range(10):
        pure = time.time()
        mine = time.perf_counter() + delta
        timestamps.append((pure, mine))
    for row in timestamps:
        print(row)

(1595947258.0029619, 1595947258.0029738)
(1595947258.0029619, 1595947258.0029812)
(1595947258.0029619, 1595947258.0029826)
(1595947258.0029619, 1595947258.002984)
(1595947258.0029619, 1595947258.0029855)
(1595947258.0029619, 1595947258.0029874)
(1595947258.0029619, 1595947258.0029886)
(1595947258.0029619, 1595947258.00299)
(1595947258.0029619, 1595947258.0029914)
(1595947258.0029619, 1595947258.002993)

摘自更长的输出,其中纯时间最终发生了变化(不得不尝试数千行):

...
(1595947517.2481732, 1595947517.2532165)
(1595947517.2481732, 1595947517.2532175)
(1595947517.2481732, 1595947517.2532187)
(1595947517.256172, 1595947517.2532716)
(1595947517.256172, 1595947517.253275)
(1595947517.256172, 1595947517.253278)
...

推荐阅读