curl.perform在多线程环境下抛出无效的易处理错误

时间:2011-03-06 17:42:28

标签: ruby curl curb

我使用ruby gem curb的curl来获取多线程env下的多个url,但它会抛出“Invalid easy handle”异常,但如果它在单线程env中逐个运行,一切都可以。

module Http
  @@curl = Curl::Easy.new
  @@curl.timeout = 10 #second
  @@curl.follow_location = true
  @@curl.max_redirects = 3
  @@options = Robot::HttpOptions.new

  def self.fetch(url, options=@@options, type=Robot::Type::HTML)
    @@curl.url = URI.unescape(url)==url ? URI.escape(url) : url
    @@curl.headers["User-Agent"] = options.user_agent
    begin
      @@curl.perform
    rescue Curl::Err::CurlError
      raise
    end
  end
end

在多线程环境中调用self.fetch。

有人可以帮我解决这个问题吗?谢谢。

1 个答案:

答案 0 :(得分:2)

来自cURL documentation

  

您绝不能在多个线程中共享相同的句柄。