python - 在 python 中存储和操作时间戳数组的最有效方法
问题描述
我正在用 python 设计一个对延迟敏感的应用程序,其中我将有几个时间戳数组。我正在尝试计算过去 1、5、25、50 和 100 秒内事件发生的次数,因此总共有 5 个数组。我计划在事件发生时将这些数组附加到事件的时间。然后在一个单独的线程中,我将删除早于过去 1、5、25、50 或 100 秒的值。
我预计通常每 100 秒出现少于 1000 次,但理论上的最大值是每 100 秒 10,000 次。我打算使用一个基本的日期时间对象数组,但我有兴趣了解哪些数据结构对此更快。起初,我正在考虑使用 pandas 数据框,但事实证明这太慢了。我知道 numpy 数组并使用 time.time() 代替,但我想还有其他方法可能更有效。很想听听 Python 专家的计算效率最高的方法。
解决方案
每秒发生 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
等中实现更“原生”的东西。
试试看!
推荐阅读
- django - 错误:提交反应表单时操作可能没有未定义的“类型”属性
- python - 找不到页面(404):没有帖子与给定的查询匹配。
- android - 程序类型已经存在:Android.arch.lifecycle.LiveData$1
- python - 无法在 Python 中使用 pandas 系列将字符串转换为浮点数
- angularjs - 获取 TypeError:XYZ 不是 Angular 中的函数
- bash - Bash:在 for 循环中的 echo $variable 之后附加字符
- bootstrap-4 - 保持按钮对齐独立于文本长度
- javascript - Javascript 从 chrome 控制台触发 jsaction
- excel - 宏 Excel - 如何记录错误?
- mysql - 如何连接多个垂直值