Python异步编程(新手)

本文介绍了Python异步编程的概念,包括协程、asyncio模块的使用,async和await关键字的功能,以及事件循环和Task对象的运行机制。通过实例解析,展示了如何在Python中实现异步操作,提高程序效率,特别适合于网络IO密集型任务,如爬虫应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


异步

1、协程

协程不是计算机提供的,是人为创造的。

定义(微线程)

  • 用一个线程在代码之间切换执行(是一种用户态内的上下文切换技术)
def fun1():
	print(1)
	...
	print(2)
def fun2():
	print(3)
	...
	print(4)
func1()
func2()
  • 正常情况
    • 顺序执行
    • 执行完func1后再执行func2
  • 异步
    • 一个线程
    • 可以实现在代码间来回切换
    • 比如可能先输出1,再输出3,返回去再输出2
    • 可以人为的控制

2、实现协程

  • greenlet:早期模块
  • yield:生成器
  • asyncio装饰器
  • async、await关键词(主流:python3.5)

2.1 asyncio

@asyncio.coroutine
def func1():
	print(1)
	# 遇到IO耗时操作,自动切换到tasks中的其他任务
	yield from asyncio.sleep(2)
	print(2)

@asyncio.coroutine
def func2():
	print(3)
	# 遇到IO耗时操作,自动切换到tasks中的其他任务
	yield from asyncio.sleep(2)
	print(4)
定义
  • 一个普通函数加上装饰器(@asyncio.coroutine)后就是定义为协程函数
    • coroutine:协程的意思
执行方法
  • 与普通函数直接调用执行不同
  • 协程函数的执行方法
    • 定义一个loop
    • loop = asyncio.get_event_loop()
    • 然后把异步函数扔进去里面
    • loop.run_until_complete(异步函数)
    • 多个异步函数时,可以定义一个tasks
      • 将两个异步函数放在tasks列表里
      • loop中传入tasks即可
tasks = [
		     asyncio.ensure_future(func1()),
		     asyncio.ensure_future(func2()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值