使用协程进行tcp并发测试

协程:非抢占式进程
优点:占用资源少,效率高,可以同时在应用层完成多个任务
缺点:无法利用计算机多核
协程模块:【1】greenlet

					greenlet.greenlet(func)
					功能: 创建协程对象
					参数:协程函数
					
					g.switch()
					功能: 选择执行的协程
			【2】gevent
			 gevent.spawn(func,argv,...)
					 功能 : 生成协程对象
					 参数 : func  协程函数
					         argv  协程函数参数
					 返回值: 协程对象

					 gevent.joinall(list,[timeout])
					 功能: 阻塞等待协程执行完毕
					 参数: list  协程对象列表

					 gevent.sleep(sec)
					 功能: gevent睡眠阻塞

					 * gevent协程只有遇到gevent标记的阻塞行为才会自动跳转
			
			3. monkey插件 (day9/gevent_server) 

			   功能:使普通的pythonIO阻塞行为变为可以触发gevent协程阻塞的行为

				 使用: from  gevent  import  monkey
					   
				        在模块导入前,运行响应的monkey插件函数

以下是使用gevent模块实现的:

import gevent
from gevent import monkey
monkey.patch_all() #需要在导入socket模块之前执行
from socket import*
#创建套接字
s=socket()
s.setsockopt(SOL_SOCKET,SO_REUSEADDR,True)
#绑定地址
s.bind(('0.0.0.0',9610))
#设置监听
s.listen(10)
#循环连接
while True:
	c,addr=s.accept()
	print("Connect from",addr)
	gevent.spawn(handle,c)  #协程方案
s.close()
#循环收发消息:
def handle(c):
	while True:
		data=c.recv(1024)
		if not data:
			break
		print(data.decode())
		c.send(b'OK')

	
	

以上使用协程进行工作的并发客户端就创建完成了!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值