Python 是否将本地urllib设置设为本地?

Python 是否将本地urllib设置设为本地?,python,urllib,Python,Urllib,我有一个多线程进程。对于每个线程,运行以下代码:;但是,它会将每个线程使用的代理覆盖到添加的最新代理。有没有办法使此代理设置成为线程的本地设置 self.p_handler = urllib.request.ProxyHandler({'http' : self.proxy}) self.opener = urllib.request.build_opener(self.p_handler) urllib.request.install_opene

我有一个多线程进程。对于每个线程,运行以下代码:;但是,它会将每个线程使用的代理覆盖到添加的最新代理。有没有办法使此代理设置成为线程的本地设置

        self.p_handler = urllib.request.ProxyHandler({'http' : self.proxy})
        self.opener = urllib.request.build_opener(self.p_handler)
        urllib.request.install_opener(self.opener)
        urllib.request.urlretrieve(url, filename)

不要使用
install\u opener
(全局安装),只需调用
opener
对象的
open
方法,然后将结果传输到文件中

self.p_handler = urllib.request.ProxyHandler({'http' : self.proxy})
self.opener = urllib.request.build_opener(self.p_handler)
result = self.opener.open(url)
with open(filename, 'wb') as f:
    for chunk in iter(lambda: result.read(1024), ''):
        f.write(chunk)
这里的最后两行只是为了避免将整个文件保存在内存中;它们允许它以千字节大小的块流式传输。如果您不介意将其存储在内存中,最后一点会变得更简单:

result = self.opener.open(url)
with open(filename, 'wb') as f:
    f.write(result.read())

啊,没想到我能直接做到。谢谢。:)哦,对了,忘了
urlretrieve
被弃用了。我认为现在最好的方法是使用
open()
从中读取内容,并将其写入文件。但是,如果确实不想这样做,可以创建自己的
URLopener
对象: