协程

协程

#协程的概念在操作系统中,压根不存在的,操作系统中,只有进程和线程的概念,他们俩个都是由操作系统调度的
#协程是用户态的轻量级线程:用户态===>程序员
#协程是单线程下的并发
#并发:切换和保存状态

开启协程

from gevent import spawn


def res(a,b):
    print(a)
    print(b)
    print('zhu')


j = spawn(res,a=1,b=2)   
j.join()   #如果不加join,开启协程之后直接运行主进程,程序结束,就不会运行res函数,所以需要加join,等待协程res运行结束

猴子补丁

from gevent import monkey;
monkey.patch_all()  # 检测IO
gevent模块本身无法检测常见的一些io操作
在使用的时候需要你额外的导入一句话
from gevent import monkey
monkey.patch_all()

"""
理想状态:
我们可以通过
多进程下面开设多线程
多线程下面再开设协程序
从而使我们的程序执行效率提升
"""
协程实现高并发

#服务端
import socket
import gevent
from gevent import monkey
monkey.patch_all()

def run(conn):
    while True:
        try:
            data = conn.recv(1024)
            if len(cmd) == 0:
                break
            print(data)
            conn.send(data.upper())
        except ConnectionError as e:
            break


if __name__ == '__main__':
    server = socket.socket()
    server.bind(('127.0.0.1', 8080))
    server.listen(5)
    while True:
        conn, crr= server.accept()   #程序运行到这会停止,等待客户端连接
        j = gevent.spawn(run,conn)     #产生协程,调用函数res
        #这里不加j.join是因为:如果加了,就要等待这个子协程结束才会循环,不加,客户端请求来了,产生协程,调用函数,程序就又停在等待客户端连接
posted @ 2023-03-31 16:33  xiaolisolove  阅读(32)  评论(0)    收藏  举报