代码之家  ›  专栏  ›  技术社区  ›  Robus

urllib2和cookielib线程安全

  •  3
  • Robus  · 技术社区  · 14 年前

    据我所知cookielib不是线程安全的;但话说回来,这个帖子已经5年了,所以可能是错的。

    不过,我一直在想-

    class Acc:
        jar = cookielib.CookieJar()
        cookie = urllib2.HTTPCookieProcessor(jar)       
        opener = urllib2.build_opener(cookie)
    
        headers = {}
        def __init__ (self,login,password):
            self.user = login
            self.password = password
    
        def login(self):
            return False # Some magic, irrelevant
    
        def fetch(self,url):
            req = urllib2.Request(url,None,self.headers)
            res = self.opener.open(req)
            return res.read()
    

    对于每个工作线程,它会工作吗(或者有更好的方法吗?)每个线程都会使用自己的帐户;因此,工人们不愿分享他们的饼干这一事实不是问题。

    3 回复  |  直到 14 年前
        1
  •  2
  •   Sam Dolan    14 年前

    你想用 pycurl (python接口 libcurl ). 它是线程安全的,支持cookies、https等。。界面有点奇怪,但只是需要一点习惯。

    我只使用了pycurl w/HTTPBasicAuth+SSL,但我确实找到了一个使用pycurl和cookies的示例 here id(self.crl) ).

    我记得,你需要创建一个新的 pycurl.Curl() 为每个请求维护线程安全。

        2
  •  2
  •   Serge S.    12 年前

    你可以看到这个库的实现 [python_install_path]/lib/cookielib.py 为了确保 cookielib.CookieJar 线程安全吗 .

    这意味着如果你要分享一个 CookieJar 库基耶尔 self._cookies_lock 在里面。

        3
  •  1
  •   okma    14 年前

    也许我也应该使用pycurl,urllib2不是那么聪明。