urllib3中的并发连接

时间:2018-06-12 18:39:18

标签: python python-3.x urllib urllib3

使用循环向多个网站发出多个请求,如何使用urllib3中的代理执行此操作?

代码将读入一个URL元组,并使用for循环连接到每个站点,但是,目前它没有连接到元组中的第一个url。还有一个代理。

list = ['https://URL1.com', 'http://URL2.com', 'http://URL3.com']
for i in list:
    http = ProxyManager("PROXY-PROXY")
    http_get = http.request('GET', i, preload_content=False).read().decode()

我已从上面的代码中删除了网址和代理信息。元组中的第一个URL运行正常,但在此之后,没有其他任何事情发生,只是等待。我已经尝试了clear()方法来重置循环中每次的连接。

1 个答案:

答案 0 :(得分:0)

不幸的是urllib3是同步和阻止的。您可以将它与线程一起使用,但这很麻烦,通常会导致更多问题。这些天的主要方法是使用一些异步网络。扭曲和asyncio(可能有aiohttp)是受欢迎的软件包。

我将使用trio框架和asks

提供示例
import asks
import trio
asks.init('trio')

path_list = ['https://URL1.com', 'http://URL2.com', 'http://URL3.com']

results = []

async def grabber(path):
    r = await s.get(path)
    results.append(r)

async def main(path_list):
    async with trio.open_nursery() as n:
        for path in path_list:
            n.spawn(grabber(path))

s = asks.Session()
trio.run(main, path_list)