首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >并发访问RRD (RRDTool)

并发访问RRD (RRDTool)
EN

Stack Overflow用户
提问于 2008-09-25 14:40:55
回答 4查看 3K关注 0票数 2

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

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

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

对于并发访问RRD,有谁有一个很好的方法?

我可以想出几种方法:

  1. 让一个线程创建一个队列,并且只从单个线程输入RRD。
  2. 在Python脚本中创建自己的锁定机制。(我该怎么做?)

有什么更好的吗,还是你以前遇到过这个问题?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-09-25 15:32:22

独占锁应该足以解决这个问题:

  • Python页面
  • 用例

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

编辑以回应评论:

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

票数 1
EN

Stack Overflow用户

发布于 2010-02-04 11:37:12

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

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

票数 3
EN

Stack Overflow用户

发布于 2010-07-22 11:40:09

这个帖子中的rrd-用户列表可能是有用的。rrdtool的作者指出,它的文件锁定处理并发读和写。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/133774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档