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

前端之家收集整理的这篇文章主要介绍了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

猜你在找的Ruby相关文章