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

前端之家收集整理的这篇文章主要介绍了如何限制同一个Ruby脚本的并发实例?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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相关文章