首页 > 解决方案 > 在 python 中存储和操作时间戳数组的最有效方法

问题描述

我正在用 python 设计一个对延迟敏感的应用程序,其中我将有几个时间戳数组。我正在尝试计算过去 1、5、25、50 和 100 秒内事件发生的次数,因此总共有 5 个数组。我计划在事件发生时将这些数组附加到事件的时间。然后在一个单独的线程中,我将删除早于过去 1、5、25、50 或 100 秒的值。

我预计通常每 100 秒出现少于 1000 次,但理论上的最大值是每 100 秒 10,000 次。我打算使用一个基本的日期时间对象数组,但我有兴趣了解哪些数据结构对此更快。起初,我正在考虑使用 pandas 数据框,但事实证明这太慢了。我知道 numpy 数组并使用 time.time() 代替,但我想还有其他方法可能更有效。很想听听 Python 专家的计算效率最高的方法。

标签: pythondatetime

解决方案


每秒发生 10-100 次真的没什么。简单地使用列表应该很快。我可能只会选择 1 个列表。在这种情况下使用 5 个集合似乎有点矫枉过正,并不值得。

一件事是性能,另一件事是性能。除非您需要每秒进行一百万次读取,否则只需遍历列表并计算其中的值就可以了。

另一个提示:您可能希望将时间戳存储为数字(Unix 时间戳,自 1970-01-01 以来的秒数)。并且当您阅读时,不要为每次比较获取当前时间戳。首先获取当前时间戳,将其保存到局部变量中,然后与该局部变量进行比较。像这样:

curr_time = time.time()
for t in times:
    sec_ago = t - curr_time
    ...

尽管在简单循环、比较等CPython方面相对较慢,但我想,对于您的情况,性能仍然应该相当不错。C但如果你真的需要极致性能,你可以考虑在, Rust,Cython等中实现更“原生”的东西。

试试看!


推荐阅读