Python代理检查器,改为线程版本
我有一个用Python写的代理检查器。
为了加快检查的速度,我决定改成多线程版本。
但是对我来说,线程模块是第一次使用,我尝试了好几次把它改成线程版本。
我查了很多资料,但对新手Python程序员来说,这并不是那么简单。
如果有人能帮我,我会非常感激!!
提前谢谢大家!
import urllib2, socket
socket.setdefaulttimeout(180)
# read the list of proxy IPs in proxyList
proxyList = open('listproxy.txt').read()
def is_bad_proxy(pip):
try:
proxy_handler = urllib2.ProxyHandler({'http': pip})
opener = urllib2.build_opener(proxy_handler)
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
urllib2.install_opener(opener)
req=urllib2.Request('http://www.yahoo.com') # <---check whether proxy alive
sock=urllib2.urlopen(req)
except urllib2.HTTPError, e:
print 'Error code: ', e.code
return e.code
except Exception, detail:
print "ERROR:", detail
return 1
return 0
for item in proxyList:
if is_bad_proxy(item):
print "Bad Proxy", item
else:
print item, "is working"
1 个回答
4
urllib2.install_opener()
这个函数会安装一个 全局 的打开器,也就是说它在多线程环境下不安全。所以最好不要用这个函数,而是直接调用 opener.open()
方法,而不是全局的 urllib2.urlopen()
函数。此外,建议使用 Queue
类,这个类来自 Queue
模块,用来存放你要检查的代理列表。你代码的其他部分在多线程模式下是可以正常使用的。