- 什么是协程?
协程是一个微线程,程序员可以使用协程控制程序执行流程,协程在操作系统本身是不存在的,是程序员创造出来的 - 协程依赖的模块:greenlet
但是单纯的协程在程序中是没有意义的,所以一般在编写程序的时候,将协程与IO多路复用联合使用,可以提高并发的效率 协程结合IO多路复用依赖模块gevent ,这个模块中,当协程每遇到一个IO操作的时候,并不是等待而是去执行别的代码片段
在之前的单线程异步非阻塞中使用的是循环检测IO对象的变化提高并发,这是两个的区别,但是本质没有区别
协程代码:
import greenlet
def task1():
print("这是任务一")
gent2.switch()
print("任务一正在执行")
print("任务一结束")
def task2():
print("这是任务二")
print("任务二正在执行")
gent1.switch()
print("任务二结束")
gent1 = greenlet.greenlet(task1)
gent2 = greenlet.greenlet(task2)
gent1.switch()
协程与IO多路复用代码:
from gevent import monkey
monkey.patch_all()
import requests
import gevent
def get_request1(url):
ret = requests.get(url)
print(ret.content)
def get_request2(url):
ret = requests.get(url)
print(ret.content)
def get_request3(url):
ret = requests.get(url)
print(ret.content)
gevent.joinall([
gevent.spawn(get_request1,"https://www.python.org/"),
gevent.spawn(get_request2,"https://www.yahoo.com/"),
gevent.spawn(get_request3,"https://github.com/"),
])
|