python并发原理(阻塞、非阻塞、epoll)
发布时间:2020-12-17 00:09:23 所属栏目:Python 来源:网络整理
导读:在Linux系统中 01 阻塞服务端 特征:1对1,阻塞。 div class="cnblogs_code" server = socket.socket() server.bind(( ,8000)) server.listen(5) conn,addr = server.accept() ( data = conn.recv(1024 data == b data == b ( ( 02 非阻塞服务端 特征:1对多
在Linux系统中01 阻塞服务端 特征:1对1,阻塞。
<div class="cnblogs_code">
server = socket.socket()
server.bind((,8000))
server.listen(5)
conn,addr = server.accept()
( data = conn.recv(1024 data == b data == b (
(
02 非阻塞服务端 特征:1对多,轮询,非阻塞,占用资源多。
<div class="cnblogs_code">
server = socket.socket()
server.setblocking(False)
server.bind((,8001))
server.listen(5)
all_connection = []
conn,addr = server.accept()
conn.setblocking(False)
(
handle = all_connection.copy()
connection recv_data = connection.recv(1024 :
( all_connection.remove(connection)
03 epoll服务端 特征:1对多,通知机制,非阻塞,占用资源少;epoll:注册惰性事件回调。
<div class="cnblogs_code"> selectors
epoll = selectors.EpollSelector()
server = socket.socket()
server.bind((,8082 server.listen(100
conn,addres = server.accept()
data = conn.recv(1024 epoll.unregister(conn)
events = epoll.select()
key,mask sock = key.fileobj
callback = key.data
callback(sock)
04?客户端 测试服务端。
<div class="cnblogs_code">
client = client.connect((,8082
data = input( recv_data = client.recv(1024 (recv_data.decode())
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |