为什么我的多线程客户端应用程序中出现错误和连接速度慢?

时间:2015-06-30 17:28:01

标签: python multithreading dns python-requests

我正在尝试从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。

0 个答案:

没有答案