Python协程

发布时间 2023-06-02 16:12:24作者: 梁书源

模板

  • 利用协程执行一般任务
import asyncio

async def func1():
	pass
	await asyncio.sleep()
	pass

async def func2():
	pass
	await asyncio.sleep()
	pass

async def func3():
	pass
	await asyncio.sleep()
	pass


# 方法一:
async def main():
	f1 = func1()
	await f1  # 一般await挂起操作放在协程对象前面,await必须卸载async函数里
	f2 = func2()
	await f2
	f3 = func3()
	await f3
	
# 方法二(推荐):
async def main():
	tasks = [
	asyncio.create_tasks(func1()), 
	asyncio.create_tasks(func2()), 
	asyncio.create_tasks(func3())]
	
	await asyncio.wait(tasks)


if "__name__" == "__main__":
	asyncip.run(main())
  • 协程在爬虫里的应用
import asyncio

async def download(url):
	await asyncio.sleep()  # 发起网络请求
	
async def main():
	urls= []

	tasks = []
	for url in urls:
		d = asyncio.create_tasks(download(url))
		tasks.append(d)


	await asyncio.wait(tasks)

if "__name__" == "__main__":
	asyncio.run(main())
	
  • 进一步完善
import asyncio
import aihttp