需要一个 ruby​​ 解决方案来在单独的进程中执行方法

发布于 2024-09-14 15:50:44 字数 617 浏览 11 评论 0原文

我正在实现一个轮询器服务,其界面如下所示。

poller = Poller.new(SomeClass)
poller.start
poller.stop

start 方法应该不断地开始命中 http 请求并更新数据库中的内容。一旦开始,该过程应该继续,直到它被明确停止

我知道 start 的实现需要在新进程中生成并运行。我不太确定如何在 Ruby 中实现这一点。我想要一个 ruby​​ 解决方案,而不是 ruby​​ 框架特定的解决方案(不是 Rails 插件或 sinatra 扩展。只是 ruby​​ gems)。我正在探索 eventmachine 和 starling-workling。我发现 eventmachine 太大了,无法在短时间内理解,而 workling 是一个插件,而不是一个 gem。所以让它在 Ruby 应用程序中工作是一件痛苦的事情。

我需要有关如何实现这一目标的指导。有什么指点吗?代码示例会有所帮助。

编辑

Eventmachine 或 starling-workling 解决方案将优于线程/分叉。

I am implementing a poller service whose interface looks like this.

poller = Poller.new(SomeClass)
poller.start
poller.stop

The start method is supposed to continuously start hitting an http request and update stuff in the database. Once started, the process is supposed to continue till it is explicitly stoped.

I understand that implementation of start needs to spawn and run in a new process. I am not quite sure how to achieve that in Ruby. I want a ruby solution instead of a ruby framework specific solution (Not rails plugins or sinatra extensions. Just ruby gems). I am exploring eventmachine and starling-workling. I find eventmachine to be too huge to understand in short span and workling is a plugin and not a gem. So it is a pain get it working for Ruby application.

I need guidance on how do I achieve this. Any pointers? Code samples will help.

Edit

Eventmachine or starling-workling solution would be preferred over threading/forking.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

你怎么这么可爱啊 2024-09-21 15:50:44

您不能使用 Process#kill 中的示例吗:

class Poller
  def initialize klass
    @klass = klass
  end

  def start
    @pid = fork do
      Signal.trap("HUP") { puts "Ouch!"; exit }
      instance = @klass.new
      # ... do some work ...
    end
  end

  def stop
    Process.kill("HUP", @pid)
    Process.wait
  end
end

Can't you use the example from Process#kill:

class Poller
  def initialize klass
    @klass = klass
  end

  def start
    @pid = fork do
      Signal.trap("HUP") { puts "Ouch!"; exit }
      instance = @klass.new
      # ... do some work ...
    end
  end

  def stop
    Process.kill("HUP", @pid)
    Process.wait
  end
end
云淡风轻 2024-09-21 15:50:44
class Poller

    def start
       @thread = Thread.new { 
           #Your code here
       } 
    end


    def stop
       @thread.stop
    end

end
class Poller

    def start
       @thread = Thread.new { 
           #Your code here
       } 
    end


    def stop
       @thread.stop
    end

end
夜空下最亮的亮点 2024-09-21 15:50:44

您是否考虑过 Daemons gem?

Have you considered out the Daemons gem?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文