ruby - 通过启动多个进程而不是使用线程来扩展 ruby​​ 脚本

标签 ruby linux scaling

我想增加执行网络 I/O 的脚本(抓取器)的吞吐量。我不想在 ruby​​ 中使其成为多线程(我使用默认的 1.9.1 解释器),而是想启动多个进程。那么,是否有一个系统可以执行此操作,以便我可以跟踪何时完成重新启动它,以便我随时运行 X 个数字。另外,有些将使用不同的命令参数运行。我正在考虑编写一个 bash 脚本,但如果已经存在一种在 Linux 上执行此类操作的方法,这听起来可能是一个坏主意。

最佳答案

我建议不要 fork ,而是使用 EventMachine (如果您使用的是 HTTP,则可以使用 em-http-request)。管理多个进程可能有点困难,甚至比处理多个线程还要复杂,但相比之下,沿着事件路径走要简单得多。由于您主要想做的是网络 IO,其中主要包括等待,因此我认为事件方法也可以扩展,或者比 fork 或线程更好。最重要的是:它将需要更少的代码,并且更具可读性。

即使您决定为每个任务运行单独的进程,EventMachine 也可以帮助您使用 EventMachine.popen 等工具编写管理子进程的代码。

最后,如果您想在没有 EventMachine 的情况下完成此操作,请阅读 IO.popen 的文档, Open3.popenOpen4.popen 。它们都或多或少地执行相同的操作,但允许您访问子进程的 stdin、stdout、stderr(Open3、Open4)和 pid(Open4)。

关于ruby - 通过启动多个进程而不是使用线程来扩展 ruby​​ 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2810662/

相关文章:

ruby - 将 `end` 作为方法名称有什么问题吗?

PHP flock函数限制和txt缓存文件

windows - 无需任何第三方即可自行扩展的 Azure 应用程序的模式是什么?

linux - 我试图通过串口发送一个命令列表,但只有第一行被设备占用,其他的被忽略

c - 对文件系统的非阻塞访问

android - 如何在 Android 上禁用网页缩放/缩放?

css - 如何以百分比修复特定的 CSS 位置缩放

ruby-on-rails - 在 Ruby on Rails 中搜索一行代码以更改数据库中的属性

ruby-on-rails - 在一个月内创建的 Rails 范围

Ruby 实例方法和变量