gpt4 book ai didi

ruby - 如何限制同一 Ruby 脚本的并发实例?

转载 作者:数据小太阳 更新时间:2023-10-29 06:46:52 28 4
gpt4 key购买 nike

在 Ruby 1.9.x 中,不允许我的 Ruby 脚本再次运行或等待前一个实例完成的简单方法是什么?**

我希望避免困惑的文件锁定或进程表检查。

有没有类似 global mutex 的东西或信号量已经在核心?我研究了原生Mutex但这似乎只适用于一个 Ruby 进程内的线程,而不适用于不同进程。

** 稍后我可能会添加超时功能,或者限制为 N 个实例,或者希望使用多个全局锁(每个系统范围的资源一个,最多只能有一个实例)。

最佳答案

这段非常短的代码将卡住在原地,直到/tmp 中以您的脚本命名的锁定文件被独占锁定:

File.open("/tmp/#{File.basename $0}.lock", File::RDWR|File::CREAT, 0644).flock(File::LOCK_EX)

任何其他锁定它的程序,无论是否为 Ruby,只需要终止或被杀死,新的进程实例就会解除阻塞并继续。所以现在这个解决方法可以满足我的需要。我可以调用我的 Ruby 程序

timeout 1m ./myrubyscript.rb

例如,如果我不耐烦,可以从包装的 bash 脚本中获取。 (在该示例中,myrubyscript.rb 将在 1 分钟后终止,无论是否获得文件锁定以继续执行其编写的任务。)

关于ruby - 如何限制同一 Ruby 脚本的并发实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9672343/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com