ruby – 如何循环守护进程的重启?

ruby – 如何循环守护进程的重启?,第1张

概述我正在尝试使用 Ruby的守护进程gem并循环重启具有自己的循环的守护进程.我的代码现在看起来像这样: require 'daemons'while true listener = Daemons.call(:force => true) do users = accounts.get_updated_user_list TweetStream::Client.new.f 我正在尝试使用 Ruby的守护进程gem并循环重启具有自己的循环的守护进程.我的代码现在看起来像这样:

require 'daemons'while true  Listener = Daemons.call(:force => true) do    users = accounts.get_updated_user_List    TweetStream::ClIEnt.new.follow(users) do |status|      puts "#{status.text}"    end  end  sleep(60)  Listener.restartend

运行此 *** 作会给我以下错误(60秒后):

undefined method `restart' for #<Daemons::Application:0x007fc5b29f5658> (NoMethodError)

所以很明显,Daemons.call不会像我认为的那样返回可控制的守护进程.我需要做什么才能正确设置它.守护进程是否是正确的工具?

解决方法 我认为这就是你所追求的,尽管我还没有测试过.

class RestartingUserTracker  def initialize    @clIEnt = TweetStream::ClIEnt.new  end  def handle_status(status)    # do whatever it is you're going to do with the status  end  def fetch_users    accounts.get_updated_user_List  end  def restart    @clIEnt.stop_stream    users = fetch_users    @clIEnt.follow(users) do |status|      handle_status(status)    end  endendEM.run do  clIEnt = RestartingUserTracker.new  clIEnt.restart  EM::PeriodicTimer.new(60) do    clIEnt.restart  endend

以下是它的工作原理:

TweetStream在内部使用EventMachine,作为永久轮询API并处理响应的一种方式.我可以看到为什么你可能会感到卡住,因为正常的TweetStream API会永久阻止,并且不会让你在任何时候进行干预.但是,TweetStream允许您在同一个事件循环中设置其他内容.在你的情况下,一个计时器.我在这里找到了关于如何做到的文档:https://github.com/intridea/tweetstream#removal-of-on_interval-callback

通过启动我们自己的EventMachine反应器,我们可以将自己的代码注入反应器以及使用TweetStream.在这种情况下,我们使用一个简单的计时器,每隔60秒重新启动一次客户端.

EventMachine是一个名为Reactor Pattern的实现.如果您想要完全理解和维护这些代码,那么找到一些有关它的资源并获得完整的理解将很有用.反应器模式非常强大,但最初可能难以掌握.

但是,此代码应该可以帮助您入门.另外,我会考虑将RestartingUserTracker重命名为更合适的东西.

总结

以上是内存溢出为你收集整理的ruby – 如何循环守护进程的重启?全部内容,希望文章能够帮你解决ruby – 如何循环守护进程的重启?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1274737.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存