ruby-on-rails – 使用Rails运行多个后台并行作业

在我的 Ruby on Rails应用程序上,我需要并行执行50个后台作业.每个作业都创建到不同服务器的TCP连接,定义一些数据并更新活动记录对象.

我知道执行此任务的不同解决方案,但它们中的任何一个并行.例如,如果只有并行执行所有作业,delayed_job(DJ)可能是一个很好的解决方案.

有任何想法吗?谢谢.

解决方法

一些想法……

>仅仅因为你需要阅读50个站点并且自然想要一些并行工作并不意味着你需要50个进程或线程.您需要平衡减速和开销.如果有10个或20个进程每个读取几个站点怎么样?
>根据您使用的Ruby,请注意绿色线程,您可能无法获得所需的并行结果
>您可能希望将其构造为反向客户端inetd,并使用connect_nonblock和IO.select通过使所有服务器并行响应来获取所需的并行连接.您并不需要并行处理结果,只需要并行处理所有服务器,因为这是延迟的真正原因.

所以,来自套接字库的类似内容……将其扩展为多个未完成的连接……

require 'socket'
include Socket::Constants
socket = Socket.new(AF_INET,SOCK_STREAM,0)
sockaddr = Socket.sockaddr_in(80,'www.google.com')
begin
  socket.connect_nonblock(sockaddr)
  rescue Errno::EINPROGRESS
  IO.select(nil,[socket])
  begin
    socket.connect_nonblock(sockaddr)
    rescue Errno::EISCONN
  end
end
socket.write("GET / HTTP/1.0\r\n\r\n")
# here perhaps insert IO.select. You may not need multiple threads OR multiple
# processes with this technique,but if you do insert them here
results = socket.read

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...