协程代码

要工作的事情,要干的事情,要处理的事情可以创建一个进程或者线程。

每个线程或者进程都坐着相同的事情,或者不相同的事情,它们之间互不干扰。

各自做自己的事情。事情可以相同也可以不相同。

比如:售票系统、服务器与客户端的连接。

from greenlet import greenlet

def test1():
    print(12)
    gr2.switch()
    print(34)
    gr2.switch()
def test2():
    print(56)
    # 会记录位置,接着上次位置继续执行
    gr1.switch()
    print(78)
# 生成协程对象
gr1 = greenlet(test1)
gr2 = greenlet(test2)

gr1.switch()


import gevent
def foo(a):
    print("Running in foo",a)
    gevent.sleep(4)
    print("switch to foo again")
def bar():
    print("Running in bar")
    gevent.sleep(3)
    print("switch to bar again")
# 将事件加入协程
f = gevent.spawn(foo,1)
b = gevent.spawn(bar)
# 回收协程

gevent.joinall([f,b])


import gevent
from gevent import monkey
# 在导入socket前执行,改变socket的阻塞形态
monkey.patch_all()
from socket import *
from time import ctime
def server(port):
    s = socket()
    print(666)
    s.bind(("0.0.0.0",port))
    s.listen(5)
    while True:
        c,addr = s.accept()
        print("connect from",addr)
        gevent.spawn(handler,c)
# 处理客户端事件
def handler(c):
    while True:
        print(1)
        data = c.recv(1024).decode()
        if not data:
            break
        print("recv:",data)
        c.send(ctime().encode())
    c.close()

if __name__=="__main__":
    server(8066)



猜你喜欢

转载自blog.csdn.net/qq_34802511/article/details/81006669