协程


协程

目录
  • 协程
    • 一、创建协程
      • 1. 通过greenlet实现
      • 2. 通过gevent实现


一、创建协程

  • 协程是一种用户态的轻量级线程(本质是一个单线程)
  • 目的是最大化地利用好I/O阻塞的时间
  • 最基础的协程通过yield来实现不同任务之间的切换
  • 优点: 高并发+高扩展性+低成本
  • 缺点: 无法利用多核资源

1. 通过greenlet实现

from greenlet import greenlet
gr1 = greenlet(func_1)		# 创建greenlet对象
gr2 = greenlet(func_@)
gr1.switch()		# 切换其他协程

2. 通过gevent实现

import gevent
# 最大程度地监听I/O阻塞
from gevent import mokey
monkey.patch_all()

gevent.joinall([
	gevent.spawn(func_1)	# 第二个参数可以填写函数参数
	gevent.spawn(func_2)
])
gevent.sleep()	# 模拟实现真正地I/O阻塞(不同于time.sleep),用于函数中,让协程进行切换