我想对REST webserivce做很多url请求。通常在75-90k之间。但是,我需要限制到Web服务的并发连接数。
我开始用下面的方式玩灰球,但很快就开始咀嚼打开的球窝。
concurrent_limit = 30
urllist = buildUrls()
hdrs = {'Host' : 'hostserver'}
g_requests = (grequests.get(url, headers=hdrs) for url in urls)
g_responses = grequests.map(g_requests, size=concurrent_limit)
运行一分钟左右时,出现“已达到最大套接字数”错误。 据我所知,grequests中的每个request s.get调用都使用自己的会话,这意味着为每个请求打开一个新套接字。
我在github上找到了一个注释,其中提到了如何使grequest使用单个会话。但这似乎有效地将所有请求限制在一个共享池中。这似乎违背了异步http请求的目的。
s = requests.session()
rs = [grequests.get(url, session=s) for url in urls]
grequests.map(rs)
是否可以使用grequests或gevent.Pool来创建多个会话?
换言之:如何通过排队或连接池发出多个并发http请求?
rs是一个异步请求列表。每个异步请求都有自己的会话。
像这样的:
这将把请求分散到50个不同的会话中。
我最终没有用社交游戏来解决我的问题。我仍然希望这是可能的。
我用了线程:
相关问题 更多 >
编程相关推荐