我无法弄清楚此代码中的问题。
class Threader(threading.Thread):
def __init__(self, queue, url, host):
threading.Thread.__init__(self)
self.queue = queue
self.url = url
self.host = host
def run(self):
print self.url # http://www.stackoverflow.com
with contextlib.closing(urllib2.urlopen(self.url)) as u:
source = u.read()
print "hey" # this is not printing!
source = self.con()
doc = Document(source)
self.queue.put((doc, self.host))
运行此代码时,print self.url
成功输出了网址,但print "hey"
无效。所以基本上,(我相信)contextlib会阻塞代码。我还尝试了不使用urlopen
的传统contextlib
方法,但它也不起作用。此外,我尝试try
- except
但该程序不会引发任何错误。那么这可能是什么问题呢?
答案 0 :(得分:2)
您的代码不起作用,我已经冒昧地调整它(导入,也不知道Document和self.con),并使其与python2兼容(这就是我在这里使用的当下) - 它有效:
from __future__ import with_statement
import threading, Queue, urllib2, contextlib
class Threader(threading.Thread):
def __init__(self, queue, url, host):
threading.Thread.__init__(self)
self.queue = queue
self.url = url
self.host = host
def run(self):
print self.url
with contextlib.closing(urllib2.urlopen(self.url)) as u:
source = u.read()
print "hey"
if '__main__'==__name__:
t = Threader(Queue.Queue(), 'http://www.stackoverflow.com', '???')
t.start()
t.join()
编辑:也适用于“with”和contextlib
答案 1 :(得分:0)
由于仅使用urllib问题仍然存在,最可能的原因是您尝试打开的网址没有响应。
你应该尝试
timeout
urllib2.urlopen
参数
醇>