example24.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637
  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. import aiohttp
  13. async def fetch(session, url):
  14. async with session.get(url, ssl=False) as resp:
  15. return await resp.text()
  16. async def main():
  17. pattern = re.compile(r'\<title\>(?P<title>.*)\<\/title\>')
  18. urls = ('https://www.python.org/',
  19. 'https://git-scm.com/',
  20. 'https://www.jd.com/',
  21. 'https://www.taobao.com/',
  22. 'https://www.douban.com/')
  23. async with aiohttp.ClientSession() as session:
  24. for url in urls:
  25. html = await fetch(session, url)
  26. print(pattern.search(html).group('title'))
  27. if __name__ == '__main__':
  28. loop = asyncio.get_event_loop()
  29. loop.run_until_complete(main())
  30. loop.close()