Mechanize - 接收Errno :: EMFILE:打开文件太多 - 一天后socket(2)

 A600810 发布于 2023-02-08 12:10

我正在运行一个应用程序,它使用mechanize来经常从RSS提要中获取一些数据.

它作为一个heroku工作者运行,大约一天后我收到以下错误:Errno :: EMFILE:打开文件太多 - socket(2)

我无法在机械化中找到"关闭"方法,为了关闭浏览器会话,我需要做些什么特别的事情吗?

以下是我创建浏览器+读取信息的方法:

  def mechanize_browser
    @mechanize_browser ||= begin
      agent = Mechanize.new
      agent.redirect_ok = true
      agent.request_headers = {
        'Accept-Encoding' => "gzip,deflate,sdch",
        'Accept-Language' => "en-US,en;q=0.8",
      }
      agent
    end
  end

并实际获取信息:

  response = mechanize_browser.get(url)

然后在回复后关闭:

  def close_mechanize_browser
    @mechanize_browser = nil
  end

提前致谢!

1 个回答
  • 由于您手动无法关闭每个实例Mechanize,因此可以尝试Mechanize作为块调用.根据文件:

    块执行后,清理实例.这包括关闭所有打开的连接.

    因此,不要抽象Mechanize.new到自定义函数中,而是尝试Mechanize通过start类方法运行,该方法应在完成请求后自动关闭所有连接:

    Mechanize.start do |m|
      m.get("http://example.com")
    end 
    

    2023-02-08 12:12 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有