python----单线程实现并发之协程
''' - 什么是协程? 协程有别于【多线程】、【多进程】,协程是指单线程实现并发的效果。一个线程里总是会存在I/O操作,此时操作系统检测到会自动将cpu执行权限分配给其他线程。 而协程就是在一个线程里运行多个’子线程’,当其中的‘子线程’处于阻塞状态时会自动切换到另外一个‘子线程’。这样在CPU看来,我们这个程序就是一直处在运行的状态。 - 为什么要使用协程? 协程可以节约内存,提高程序的运行效率。 - 如何使用协程? 使用gevent模块,spawn,monkey。 monkey.patch_all() 猴子补丁,将监测所有I/O操作 '''
# 利用协程实现TCP服务端并发 from gevent import monkey, spawn;monkey.patch_all() from threading import current_thread from socket import * def communicate(conn): print(f'子线程:{current_thread().getName()}') while True: try: data = conn.recv(1024) print(data) conn.send(data.upper()) except: break conn.close() def server(ip, port): server = socket(AF_INET, SOCK_STREAM) server.bind((ip, port)) server.listen(5) while True: conn, addr = server.accept() print(f'{addr}连接.....') spawn(communicate, conn) g.start() if __name__ == '__main__': g = spawn(server, '127.0.0.1', 9999) g.join()
# 客户端 from socket import * from threading import Thread,current_thread def run(): client = socket(AF_INET, SOCK_STREAM) client.connect( ('127.0.0.1', 9999) ) while True: client.send(f"hello i'm {current_thread().getName()}".encode('utf-8')) data = client.recv(1024) print(data.decode('utf-8')) if __name__ == '__main__': t_list = [] for i in range(500): t = Thread(target=run, ) t.start()
相关推荐
efeve 2020-09-14
ericxieforever 2020-09-03
Dimples 2020-06-08
鲁鲁酱 2020-06-02
feishicheng 2020-05-31
paopao00 2020-05-10
georgeandgeorge 2020-05-09
Greatemperor 2020-05-03
jacktangj 2020-04-17
CloudXli 2020-04-07
oXiaoChong 2020-04-07
学习备忘录 2020-02-18
wyqwilliam 2020-02-10
PythonMaker 2020-01-19
ddxygq 2019-12-30
shengge0 2019-12-26
sschencn 2019-12-19
千锋 2019-12-07
Laozizuiku 2019-12-04
mayflowers 2019-11-18
wklken的笔记 2019-11-01