协程:实现并发请求

本文探讨Python协程与同步多线程在并发请求中的应用,通过对比腾讯网和豆瓣电影信息的请求耗时,展示异步(aiohttp)和同步方式的性能差异。在低并发情况下,两者效率相近;但在高并发时,协程可能受限于系统资源,而多线程仍能运行。选择哪种方式取决于个人喜好和具体场景。
摘要由CSDN通过智能技术生成

关于Python协程的讨论,一般出现最多的几个关键字就是:

  • 阻塞
  • 非阻塞
  • 同步
  • 异步
  • 并发
  • 并行
  • 协程
  • asyncio
  • aiohttp

概念知识的话,感觉以下两篇博文都讲得不错,这里就不转了,直接贴地址:
http://python.jobbole.com/87310/
http://python.jobbole.com/88291/
https://aiohttp.readthedocs.io/en/stable/client_quickstart.html #这个是aiohttp的文档

我在下面的内容就当作一些练习题好了。

  • 定义一个协程函数,请求一次腾讯网
import asyncio
import aiohttp


async def get_page(url):
	async with aiohttp.ClientSession() as session:
		async with session.get(url) as resp:
			page = await resp.text(encoding='GB18030')
			print(page)


url = 'https://www.qq.com'
loop = asyncio.get_event_loop()
loop.run_until_complete(get_page(url))
  • 给协程添加一个回调函数,抓取腾讯网的标题
import asyncio
import aiohttp
import re


async def get_page(url):
	async with aiohttp.ClientSession() as session:
		async with session.get(url) as resp:
			page = await resp.text(encoding='GB18030')
			return page


def callback(future):
	pattern = '<title>(.*?)</title>'
	item = re.findall(pattern, future.result())
	print(item)


url = 'https://www.qq.com'
loop = asyncio.get_event_loop()
task = asyncio.ensure_future(get_page(url))
task.add_done_callback(callback)
loop.run_until_complete(task)
  • 并发请求100次腾讯网,平均耗时约为:2.349秒
import asyncio
import aiohttp
import re
import time


async def get_page(url):
	async with aiohttp.ClientSession() as session:
		async with session.get(url) as resp:
			page = await resp.text(encoding='GB18030')
			return page


def callback(future):
	pattern = '<title>(.*?)</title>'
	item = re.findall(pattern, future.result())
	print(item)


url 	=	'https://www.qq.com'
loop 	=	asyncio.get_event_loop()
tasks 	= 	[asyncio.ensure_future(get_page(url)) for _ in range(100)]
for task in tasks:
	task.add_done_callback(callback)
start	= 	time
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值