我想增加执行net I / O(刮刀)的脚本的吞吐量。我没有在ruby中使用多线程(我使用默认的1.9.1解释器),而是想启动多个进程。那么,是否有一个系统可以执行此操作,以便我可以在完成再次重新启动时跟踪,以便我可以随时运行X号码。另外一些将使用不同的命令args运行。我正在考虑编写一个bash脚本,但如果已经存在一种在linux上执行此类操作的方法,那听起来似乎是个坏主意。
答案 0 :(得分:2)
我建议不要分叉,而是使用EventMachine(如果您正在使用HTTP,则使用优秀的em-http-request)。管理多个进程可能有点少,甚至比处理多个线程更多,但相比之下,沿着规范路径走下去要简单得多。由于你想要主要做的主要是等待的网络IO,我认为一种公平的方法也可以扩展,或者比分叉或线程更好。最重要的是:它将需要更少的代码,并且更具可读性。
即使您决定为每个任务运行单独的进程,EventMachine也可以帮助您编写管理子进程的代码,例如EventMachine.popen
。
最后,如果您想在没有EventMachine的情况下执行此操作,请阅读IO.popen,Open3.popen和Open4.popen的文档。所有这些都或多或少地做同样的事情,但是你可以访问子进程的stdin,stdout,stderr(Open3,Open4)和pid(Open4)。
答案 1 :(得分:1)
您可以尝试前叉http://ruby-doc.org/core/classes/Process.html#M003148
您可以获得PID并查看此过程是否再次运行。
如果要管理IO并发。我建议你使用EventMachine。
答案 2 :(得分:0)
你可以