我正在尝试从api获取json数据。我需要向服务器做很多请求,我是以多线程方式做的。我有一个很大的id列表,我每个id都会收到一个请求。然后我将每个json响应保存到列表中。
import requests
from threading import Thread
from Queue import Queue
def doWork():
while True:
item_id = q.get()
item = get_json(item_id)
items.append(item)
q.task_done()
def get_json(item_id):
link = 'https://my-api.com/item/{}.json'.format(item_id)
json_response = requests.get(link).json()
return json_response
concurrent = 64
items = []
q = Queue(concurrent)
for i in range(concurrent):
t = Thread(target=doWork)
t.daemon = True
t.start()
for item_id in range(500):
q.put(item_id)
q.join()
如果我在大量的id(多于几个)上放松,我总是会遇到“名称解析暂时失败”的连接错误。如果我自己调整速度并且仅在500 ids上运行它就可以运行,但如果我经常运行它,我仍会遇到错误。
我尝试在一个循环中运行它以获得500个ID的块并在请求之间休眠,并且在块之间但我仍然会遇到一堆错误并且连接速度变慢。
我怎么知道是什么导致了我的问题?
我正在运行Ubuntu 15.04。