我正在开发一个Python后端web服务器,它从付费的第三方API获取实时数据。
我需要查询这个API非常快(大约每10秒150个查询)。因此,我创建了一个小的概念证明,生成200个线程并将url写入队列。然后,线程从队列中读取url并发送HTTP请求。第三方API返回一个名为delay的值,即服务器处理请求所用的时间。
下面是POC代码,它只下载所有url(而不是重复)。在_http_pool = urllib3.PoolManager()
def getPooledResponse(url):
return _http_pool.request("GET", url, timeout=30)
class POC:
_worker_threads = []
WORKER_THREAD_COUNT = 200
q = Queue.Queue()
@staticmethod
def worker():
while True:
url = POC.q.get()
t0 = datetime.datetime.now()
r = getPooledResponse(item)
print "thread %s took %d seconds to process the url (service delay %d)" % (threading.currentThread().ident, (datetime.datetime.now() - t0).seconds, getDelayFromResponse(r))
POC.q.task_done()
@staticmethod
def run