Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何创建一个等待作业并执行它们的工作进程守护进程?_Ruby On Rails_Ruby_Multithreading_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 如何创建一个等待作业并执行它们的工作进程守护进程?

Ruby on rails 如何创建一个等待作业并执行它们的工作进程守护进程?,ruby-on-rails,ruby,multithreading,ruby-on-rails-4,Ruby On Rails,Ruby,Multithreading,Ruby On Rails 4,我是Rails和多线程的新手,对如何以最优雅的方式实现以下内容感到好奇。 我找不到任何好的教程详细解释了以下任务的最佳设计决策: 我有几个HTTP请求将在后台为用户运行,例如,解析几个网站并获取一些信息,如HTTP响应代码、响应时间,然后返回结果。出于性能原因,我决定将要解析的URL总数拆分为25个批次,然后在一个线程中执行每个批次,将它们连接起来,并将结果写入数据库 我决定使用以下gem()来确保同时运行的线程数量达到最大值。到目前为止还不错 问题是,如果两个用户同时开始分析,最大线程数是我的

我是Rails和多线程的新手,对如何以最优雅的方式实现以下内容感到好奇。 我找不到任何好的教程详细解释了以下任务的最佳设计决策:

我有几个HTTP请求将在后台为用户运行,例如,解析几个网站并获取一些信息,如HTTP响应代码、响应时间,然后返回结果。出于性能原因,我决定将要解析的URL总数拆分为25个批次,然后在一个线程中执行每个批次,将它们连接起来,并将结果写入数据库

我决定使用以下gem()来确保同时运行的线程数量达到最大值。到目前为止还不错

问题是,如果两个用户同时开始分析,最大线程数是我的线程池最大线程数的两倍

我的解决方案(imho)是创建一个工作进程守护进程,它自己运行并等待来自客户端的作业

我的问题是,在Rails中实现这一点的最佳方法是什么

可能会创建一个Rake任务,并将其用作守护进程(请参阅:“”)和(如何?)向其添加作业


提前非常感谢

我将在数据库中的一个表中构建一个队列,以及由cron定期启动的一段代码,cron遍历该表,将请求传递给

以下是作者对gem的总结:

就像现代代码版本的100个蛇头的神话野兽一样,Typhous并行运行HTTP请求,同时干净地封装处理逻辑

当用户添加请求时,将其追加到表中。您将需要如下字段:

  • 一个“已处理”字段,以便您可以在系统发生故障时判断哪些已处理
  • “success”字段,这样您可以知道哪些请求已成功处理,如果请求失败,您可以重试
  • “重试次数”字段,这样您最多可以重试“n”次,然后将该URL标记为无法访问
  • 一个“下一次扫描时间”字段,该字段表示何时应再次扫描URL,这样您就不会连续点击某个站点而拒绝该站点

Typhous和Hydra易于使用,并且确实使处理多个请求变得容易。

有许多Rails库可以为您管理长期运行的后台作业队列。以下是一些:

  • 用于作业存储并支持多个工作线程
  • 还使用Redis和单个辅助线程
  • 通过ActiveRecord(或Mongoid)管理作业队列

一旦您选择了一个守护程序,我建议您使用它来简化一次启动多个守护程序的过程。

感谢您提供的有趣的输入-我将阅读它,并在明天给您反馈。:)嗨,锡人,这看起来很有希望。我会仔细阅读,明天给你反馈!附言:谢谢你纠正/澄清我糟糕的英语我摆弄着这块宝石,感到很满意。提弗斯和海德拉完全符合我的要求!非常感谢你。