2009-12-07 49 views
1

我有一些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" 

回答

4

urllib2.install_opener()函数安装全球揭幕战,即它不是线程安全的。所以不要使用它,并调用opener.open()方法而不是全局urllib2.urlopen()函数。使用Queue模块中的Queue类来保存要检查的代理列表。剩下的代码可以在线程模式下使用。

+0

hi..yes..i知道排队是安全的,我用不同的方法尝试了几次,但缺乏对线程的知识,我没有运气......谢谢 – paul 2009-12-07 09:52:19

+1

这是页尾页的示例用'Queue'模块文档:http://docs.python.org/library/queue.html。适应你的任务是相当的功课。 – 2009-12-07 10:34:21