潭州课堂25班:Ph201805201 并发(非阻塞,epoll) 第十课 (课堂笔记)
# -*- coding: utf-8 -*-
# 斌彬电脑
# @Time : 2018/7/12 0012 20:29 import socket
server = socket.socket()
server.setblocking(False) server.bind(('',10000)) # 绑定ip,和端口,
server.listen(5)
con_l = []
while 1:
try:
con,addr = server.accept()
con.setblocking(False)
con_l.append(con)
except Exception:
pass del_l = [con for con in con_l]
for con in con_l:
try:
recv_data = con.recv(1024)
if recv_data:
print(recv_data)
con.send(recv_data)
else:
con.close()
con_l.remove(con)
except Exception:
pass
# -*- coding: utf-8 -*-
# 斌彬电脑
# @Time : 2018/7/13 0013 23:16
import socket,selectors
import tuling epoll_secret = selectors.DefaultSelector()
#根据平台选择最佳的IO多路机制,比如linux就会选择epoll sever = socket.socket()
sever.bind(('',10000))
sever.listen(1000) def read(conn):
try:
rec_data = conn.recv(1024)
# if rec_data: # 在 linux 中
print(rec_data.decode('utf-8'))
se = tuling.Tuling(rec_data.decode('utf-8'))
conn.send(se.encode('utf-8'))
except Exception:
# else:
epoll_secret.unregister(conn) # 如果客户端断开,就取消对应的注册事件 def accept(sever):
conn,addr = sever.accept()
print('客户端地址:', addr)
# 处理事件
epoll_secret.register( conn, selectors.EVENT_READ, read )
# return conn # 注册事件
epoll_secret.register( sever, selectors.EVENT_READ, accept )
# 3 个参数: 监听套接字, 可读, 回调函数
# 事件说明:当监听到有活跃客户端(可读)发生时,运行指定函数 while True:
# 开启事件
# 循环查询客户端事件,把连接的客户端写入列表 ,
events = epoll_secret.select()
# print(events) # # [(SelectorKey(fileobj=<socket.socket fd=608, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('0.0.0.0', 9002)>, fd=608, events=1, data=<function accept at 0x000001A04AEE6A60>), 1)]
# events[0] 中有监听套接字,accept 的函数
for key,m in events:
sock = key.fileobj # 获取 对等连接套接字
callback = key.data # 获取 accept
callback( sock ) # == def accept(ser) 的调用
潭州课堂25班:Ph201805201 并发(非阻塞,epoll) 第十课 (课堂笔记)的更多相关文章
- 潭州课堂25班:Ph201805201 并发(通信) 第十三课 (课堂笔记)
from multiprocessing import Process # 有个 url 列表 ,有5个 url ,一次请求是1秒,5个5秒 # 要求1秒把 url 请求完, a = [] # 在进程 ...
- 潭州课堂25班:Ph201805201 WEB 之 页面编写 第四课 登录注册 (课堂笔记)
index.html 首页 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- 潭州课堂25班:Ph201805201 WEB 之 页面编写 第三课 (课堂笔记)
index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- 潭州课堂25班:Ph201805201 WEB 之 页面编写 第二课 (课堂笔记)
index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- 潭州课堂25班:Ph201805201 WEB 之 页面编写 第一课 (课堂笔记)
index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- 潭州课堂25班:Ph201805201 第十课 类的定义,属性和方法 (课堂笔记)
类的定义 共同属性,特征,方法者,可分为一类,并以名命之 class Abc: # class 定义类, 后面接类名 ( 规则 首字母大写 ) cls_name = '这个类的名字是Abc' # 在类 ...
- C/S系统实现两数求和(非阻塞+epoll+心跳包检测用户在线状况+滚动日志+配置文件.)
C/S系统实现两数求和 任务要求: 实现配置文件 实现日志滚动 设置非阻塞套接字,EPOLL实现 检测客户端的连接,设置心跳检测 主线程 + 心跳检测线程 + EPOLL的ET模式处理事务线程 注意事 ...
- 潭州课堂25班:Ph201805201 并发(协程) 第十五课 (课堂笔记)
#斐波那契 def fid(n): res = [] indx = 0 a = 0 b = 1 while indx < n : res.append(b) a,b = b,a+b indx + ...
- 潭州课堂25班:Ph201805201 并发(进程,线程) 第十一课 (课堂笔记)
线程,进程,是实现并发的方法, 并行: 在同一时刻,同时运行多个任务,CPU 的数量大于等于任务数量, 并发: 在同一时间间隔内, 同时处理多个任务, 并行是并发. 进程:表示一个正在执行的程序, 操 ...
随机推荐
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之Generic timer
1.前言 2.generate timer 2.1 概述 提供了一个系统计数器,用来实时测量流逝的时间: 提供了一个虚拟计数器,用来测量某个虚拟机上流逝的虚拟时间: 定时器,每隔一段时间会触发事件,支 ...
- awk对列/行进行统计求和【转】
场景]--类似于excel中的sum函数对列/行进行统计求和 A01 A02 A03 A09 [要求1]--对列进行统计求和 A01 A02 A03 A09 TOTAL [要求2]--对行进行统计求和 ...
- oem 重建
OracleDBControl启动失败to local from URL=http://your-url.co 方法: emca -deconfig dbcontrol db -repos d ...
- zabbix3.0.4使用shell脚本和zabbix自带模板两种方法添加对指定进程和端口的监控
zabbix3.0.4添加对进程的监控: 方法一:通过自定义命令进行监控 主要思路: 通过 ps -ef|grep sdk-push-1.0.0.jar |grep -v grep|wc -l 这个命 ...
- VMware环境和Window环境进行网络连接的问题
一. 首先贴出本人在网络上找到与VMware网络连接相关的知识点 安装完虚拟机后,默认安装了两个虚拟网卡,VMnet1和VMnet8,其他的未安装(当然也可以手动安装其他的).其中VMnet1是hos ...
- 作业8_exer1128.txt
1.规范化理论是关系数据库进行逻辑设计的理论依据,根据这个理论,关系数据库中的关系必须满足:每 一个属性都是(B). A.长度不变的 B.不可分解的 C.互相关联的 D.互不相关的 2.已知关系模式R ...
- [转]Apache Commons IO入门教程
Apache Commons IO是Apache基金会创建并维护的Java函数库.它提供了许多类使得开发者的常见任务变得简单,同时减少重复(boiler-plate)代码,这些代码可能遍布于每个独立的 ...
- TCP template 代码
服务端 from socket import * server= socket(AF_INET,SOCK_STREAM) server.bind(('127.0.0.1',8080)) server. ...
- Luogu P4945 【最后的战役】
本来以为做法一样,就是少带个$log$,结果发现看不懂出题人的题解(我好菜啊) 那就自己写一篇吧 比较简单的$DP$思路 状态定义: 前两个转移很好处理,第三个好像就不好办了 不妨暴力定义进状态里 设 ...
- poj3666 线性dp
要把一个序列变成一个不严格的单调序列,求最小费用 /* 首先可以证明最优解序列中的所有值都能在原序列中找到 以不严格单增序列为例, a序列为原序列,b序列为升序排序后的序列 dp[i][j]表示处理到 ...