目前正在使用线程来制作多个"异步"请求下载文件。现在我建议使用asyncio
来升级到Python 3 +。
我们必须使用ssl.SSLContext(protocol = ssl.PROTOCOL_TLS)
并传递PEM和KEY文件。
我是否可以将http.client
脚本转换为与asyncio
一起使用,还是需要将http.client
函数转换为aiohttp
函数?
加成:
无论哪种方式,有人可以概述如何在async def
和@asyncio.coroutine
之间进行选择吗?
支持信息:
考虑到我们的最后一个是顺序查询并且现在与大约15个并发请求并行工作,我的程序表现相当不错。然而,我正在处理的另一个程序向上发送500个并行请求;我可以使用threading.Semaphore()
但我已经读过asyncio
非常适合大量请求。
第一次搞乱它,所以......
我正在阅读following(并且其中80%似乎是非阻塞套接字的套接字连接,唯一适用的部分是"协调协同程序")。
答案 0 :(得分:1)
您可以使用aiohttp
;您需要翻译http.client
代码才能使用aiohttp
client API。您可以重复使用ssl.SSLContext()
对象;将其传递给TCPConnector()
instance,然后从中创建一个客户端:
import aiohttp
import ssl
SSL_CONTEXT = ssl.SSLContext(protocol=ssl.PROTOCOL_TLS)
SSL_CONTEXT.load_cert_chain(certfile='foo', keyfile='bar')
async def fetch_url(url):
conn = aiohttp.TCPConnector(ssl_context=SSL_CONTEXT)
async with aiohttp.ClientSession(conn=connector) as client:
async with client.get(url) as response:
print(resp.status)
print(await resp.text())
请注意,您无法在客户端会话之间共享连接器;如果您想重新使用,请重复使用客户端。