curl.perform выбрасывает неверную ошибку easy handle в многопоточном окружении - PullRequest
2 голосов
/ 06 марта 2011

Я использую curl of ruby ​​gem curb для извлечения нескольких URL-адресов в многопоточном окружении, но выдает исключение «Недопустимая легкая обработка», но если он запускается один за другим в однопоточном окружении, все в порядке.

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 Ответ

2 голосов
/ 06 марта 2011

Из документации cURL :

Вы никогда не должны использовать один и тот же дескриптор в нескольких потоках.

...