0
我試圖加快我的程序時使用urilib2查詢api。爲了做到這一點,我試着用多線程寫作。多線程與urlib2
但是,當我運行代碼它與以下錯誤,我沒有得到任何響應通過urlib2調用。
Traceback (most recent call last):
File "/usr/lib64/python2.6/threading.py", line 532, in __bootstrap_inner
File "/usr/lib64/python2.6/threading.py", line 484, in run
File "./myscript", line 333, in query_api
File "./myscript", line 350, in issue_request
File "/usr/lib64/python2.6/urllib2.py", line 126, in urlopen
File "/usr/lib64/python2.6/urllib2.py", line 391, in open
File "/usr/lib64/python2.6/urllib2.py", line 409, in _open
File "/usr/lib64/python2.6/urllib2.py", line 369, in _call_chain
File "/usr/lib64/python2.6/urllib2.py", line 1198, in https_open
File "/usr/lib64/python2.6/urllib2.py", line 1164, in do_open
<type 'exceptions.AttributeError'>: 'NoneType' object has no attribute 'error'
Exception in thread Thread-2 (most likely raised during interpreter shutdown):
Traceback (most recent call last):
File "/usr/lib64/python2.6/threading.py", line 532, in __bootstrap_inner
File "/usr/lib64/python2.6/threading.py", line 484, in run
File "./myscript", line 333, in query_api
File "./myscript", line 350, in issue_request
File "/usr/lib64/python2.6/urllib2.py", line 126, in urlopen
File "/usr/lib64/python2.6/urllib2.py", line 391, in open
File "/usr/lib64/python2.6/urllib2.py", line 409, in _open
File "/usr/lib64/python2.6/urllib2.py", line 369, in _call_chain
File "/usr/lib64/python2.6/urllib2.py", line 1198, in https_open
File "/usr/lib64/python2.6/urllib2.py", line 1164, in do_open
<type 'exceptions.AttributeError'>: 'NoneType' object has no attribute 'error'
我的代碼是:
class ApiMultiThreadHelper:
def __init__(self,api_calls):
self.q = Queue.Queue()
self.api_datastore = {}
self.api_calls = api_calls
self.userpass = '#####'
def query_api(self,q,api_query):
self.q.put(self.issue_request(api_query))
def issue_request(self,api_query):
self.api_datastore.update({api_query:{}})
for lookup in ["call1","call2"]:
query = api_query+lookup
request = urllib2.Request(query)
request.add_header("Authorization", "Basic %s" % self.userpass)
f = urllib2.urlopen(request)
response = f.read()
f.close()
self.api_datastore[api_query].update({lookup:response})
return True
def go(self):
for i in self.api_calls:
t = threading.Thread(target=self.query_api, args = (self.q,i))
t.daemon = True
t.start()
return self.api_datastore
感謝,
點上,工作就像一個魅力.....那裏有大約在同一類的事情我剛剛發佈了另外一個問題,如果你看中了公鵝 - > HTTP:// stackoverflow.com/questions/21682154/limiting-threads-within-python-threading-queue – felix001