并发访问RRD(RRDTool)

2024-09-30 22:26:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用RRDTool(http://oss.oetiker.ch/rrdtool/)作为存储性能指标的绘图后端。这是通过RRDTool CLI从Python脚本完成的。在

我的问题是脚本是多线程的,每个线程都以相当快的速度更新RRD。有时更新失败是因为一个线程正在访问RRD文件,而另一个线程也试图访问它。在

我觉得这是可以尝试的,因为RRDTool使用它自己的锁定机制,但我想这不是真的。在

有没有人有一个好的方法来并发访问RRD?在

我可以想出几个办法:

  1. 让1个线程创建一个队列,并且只从一个线程馈送RRD。

  2. 在Python脚本中创建我自己的锁定机制。(我该怎么做?)

有什么更好的或者你以前遇到过这个问题吗?在


Tags: 文件脚本http绘图cliossch线程
3条回答

对于这个问题,独占锁应该足够了:

在主级别而不是线程级别定义锁对象,就完成了。在

根据评论进行编辑:

如果您在线程级别定义锁(lock = new Lock()),则每个运行的线程将有一个锁对象,并且您确实希望为rrdtool更新文件提供一个锁,因此此定义必须在主级别。在

您也可以尝试使用rrdcached进行更新。然后所有写更新都将通过rrdcached序列化。当您想读取RRD以生成图形时,您告诉守护进程刷新它,磁盘上的RRD将代表最新状态。在

如果通过环境变量指向缓存的守护进程,那么所有RRD工具都将透明地执行此操作。在

rrd用户列表中的This thread可能有用。rrdtool的作者声明其文件锁定处理并发读写。在

相关问题 更多 >