CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In
jackfrued

CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!

GitHub Repository: jackfrued/Python-100-Days
Path: blob/master/Day16-20/code/example24.py
Views: 729
1
"""
2
aiohttp - 异步HTTP网络访问
3
异步I/O(异步编程)- 只使用一个线程(单线程)来处理用户请求
4
用户请求一旦被接纳,剩下的都是I/O操作,通过多路I/O复用也可以达到并发的效果
5
这种做法与多线程相比可以让CPU利用率更高,因为没有线程切换的开销
6
Redis/Node.js - 单线程 + 异步I/O
7
Celery - 将要执行的耗时间的任务异步化处理
8
异步I/O事件循环 - uvloop
9
"""
10
import asyncio
11
import re
12
13
import aiohttp
14
15
16
async def fetch(session, url):
17
async with session.get(url, ssl=False) as resp:
18
return await resp.text()
19
20
21
async def main():
22
pattern = re.compile(r'\<title\>(?P<title>.*)\<\/title\>')
23
urls = ('https://www.python.org/',
24
'https://git-scm.com/',
25
'https://www.jd.com/',
26
'https://www.taobao.com/',
27
'https://www.douban.com/')
28
async with aiohttp.ClientSession() as session:
29
for url in urls:
30
html = await fetch(session, url)
31
print(pattern.search(html).group('title'))
32
33
34
if __name__ == '__main__':
35
loop = asyncio.get_event_loop()
36
loop.run_until_complete(main())
37
loop.close()
38
39