【发布时间】:2013-05-08 11:19:01
【问题描述】:
我正在编写一个 gem,我必须派生两个进程,这两个进程正在启动两个 webrick 服务器。我想通过基类的类方法启动这些服务器,因为应该只有这两个服务器在运行,而不是多个服务器。在运行时,我想在这两个服务器上调用一些方法来改变变量。
我的问题是,我无法通过基类的类方法访问分支的实例变量。此外,我不能在我的基类中使用线程,因为在后台我使用的是另一个不是线程安全的库。所以我必须将每个服务器分叉到它自己的进程。
我尝试使用类变量,例如@@server。但是当我尝试通过基类访问这些变量时,它是nil。我读到在 Ruby 中不可能在 fork 之间共享类变量,对吗?
那么,有没有其他方法可以解决这个问题?我想过使用单例,但我不确定这是否是最好的主意。
【问题讨论】:
-
只是一个链接少一点;)我知道进程间通信,但我真的必须实现 XML 接口,或者处理系统特定的协议来实现这一点吗?我想,也许有一种“红宝石方式”可以做到这一点
-
@23tux:Ruby 进程是独立的,IPC 是(在顶层)解决您的问题的唯一方法。不过,有很多 Ruby gem 可以提供帮助。您可能只需
Marshal将您的数据写入磁盘 - 您需要添加的只是一些锁定(以避免部分读取/写入),并密切关注性能。接下来可能是编组到本地memcached以避免接触磁盘。 . .
标签: ruby multithreading process fork