python socket并发模型 --非阻塞IO

设置将原本阻塞io变为非阻塞io
方法1:sockfd.setblocking(bool)
方法2:sockfd.settimeout(sec)

from socket import *
from time import ctime,sleep

f = open('log.txt','a')	#日志文件

s = socket()
s.bind('0.0.0.0',8888)
s.listen(5)

#设置套接字非阻塞,
#方法1:sockfd.setblocking(bool),参数默认为True,设置为false时则套接字变为非阻塞
#s.setblocking(False)
#方法2:设置超时时间sockfd.settimeout(sec)
s.settimeout(3)

while True:
	try:
		c,addr = s.accept()
		print('Connect from',addr)
	#设置为非阻塞后,不必一直等待,可以干点别的事
	except (BlockingIOError,timeout) as e:	#BlockIOError为方法1的报错,timeout为方法2的报错,通过捕捉异常后的代码实现一些事件
		#当没有客户端连接我的时候,每隔2秒写个日志
		sleep(2)
		f.writer(ctime() + ':' + str(e) + '\n')	#e是个对象,需要转为str
	else:
		data = c.recv(1024)
		print(data)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值