gpt4 book ai didi

ruby - 在同一台计算机上同步两个 ruby​​ 脚本

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

同步在同一台计算机上运行的两个 ruby​​ 脚本的最佳方法是什么?

脚本将作为独立于 shell 的进程启动。

我希望脚本轮流运行。也就是说,我希望脚本 A 运行,向脚本 B 发送信号,然后等待来自脚本 B 的信号。当脚本 B 从脚本 A 获得信号时,它开始运行,在完成时向脚本 A 发出信号,然后等待来自 A 的信号。基本上,我希望这两个脚本交错运行。

实现这种同步的最佳方式是什么?

现在我能想到的就是创建一个文件作为信号(每个脚本都在忙着循环等待创建一个文件)。是否有其他更快/更容易/更安全的实现方式?

如果它影响答案,我在 OSX 上。

最佳答案

在 ruby​​ 中执行 IPC 的最简单方法可能是通过 drb并使用位于 thread 中的 Queue:

require 'thread'
queue = Queue.new # provides blocking read

请注意,在使用 drb 时,您需要在程序顶部附近添加以下行:

Socket.do_not_reverse_lookup=true;

没有它,运行速度会非常慢 (source)。

要解决问题中描述的具体问题,您可以创建一个 Pipe 类,它本质上只是两个 Queue 对象,一个用于收件箱,一个用于发件箱。 Queue 的阻塞读取行为使得进程之间很容易相互等待。 Pipe 通过 drb 在两个进程之间共享。

服务器启动代码可能如下所示:

require 'drb'
Socket.do_not_reverse_lookup=true;
uri = "druby://localhost:2250" # you can pick a port to communicate on
pipe = Pipe.new
DRb.start_service uri, pipe

客户端启动代码如下所示:

require 'drb'
Socket.do_not_reverse_lookup=true;
uri = "druby://localhost:2250"
DRb.start_service
pipe = DRbObject.new nil, uri

现在客户端和服务器可以通过 Pipe 对象进行通信。

关于ruby - 在同一台计算机上同步两个 ruby​​ 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4983043/

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