selectors实现高并发
1. 下面的例子,客户端给服务端发送消息,服务端把消息返回
server
#!/usr/bin/env python import selectors
import socket
import time
import threading sel = selectors.DefaultSelector() def echo(conn,cmd,filename):
time.sleep(3)
conn.send((cmd + ' ' + filename).encode()) def accept_client(sock,mask):
conn,addr = sock.accept()
print('conn:{},addr:{},mask:{}'.format(conn,addr,mask))
# conn.setblocking(False)
sel.register(conn, selectors.EVENT_READ, read_client) def read_client(conn,mask):
data = conn.recv(1024).decode().strip()
if data:
if len(data.split(' ')) == 2:
cmd = data.split(' ')[0]
filename = data.split(' ')[1]
t = threading.Thread(target=echo,args=(conn,cmd,filename)) #这里使用了线程,不然程序会变成串行的,执行一个客户端任务,sleep(3)然后再执行下一个客户端任务...
t.start()
# time.sleep(1)
# conn.send((cmd + ' ' + filename).encode())
else:
conn.send(('usage: put filename ;get filename').encode())
else:
print('{} closed'.format(conn))
sel.unregister(conn)
conn.close()
server = socket.socket()
server.bind(('localhost',1235))
server.listen(12340)
# server.setblocking(False)
sel.register(server, selectors.EVENT_READ,accept_client) while True:
events = sel.select()
for key,mask in events:
callable = key.data
callable(key.fileobj,mask)
client
#!/usr/bin/env python import socket
import threading
import time ip_port = ('localhost',1235)
socks = [socket.socket() for i in range(1000)] m = b'get abc'
time_list = []
def run(s):
s.connect(ip_port)
s.send(m)
data = s.recv(1024)
print(s,data) start_time = time.time()
for s in socks:
t = threading.Thread(target=run,args=(s,))
t.start()
time_list.append(t)
for i in time_list:
i.join()
print('time:{}'.format(start_time - time.time()))
2. 实现并发put和get文件
selectors实现高并发的更多相关文章
- Java高并发程序设计学习笔记(十一):Jetty分析
转自:https://blog.csdn.net/dataiyangu/article/details/87894253 new Server()初始化线程池QueuedThreadPoolexecu ...
- [ 高并发]Java高并发编程系列第二篇--线程同步
高并发,听起来高大上的一个词汇,在身处于互联网潮的社会大趋势下,高并发赋予了更多的传奇色彩.首先,我们可以看到很多招聘中,会提到有高并发项目者优先.高并发,意味着,你的前雇主,有很大的业务层面的需求, ...
- 如何在高并发分布式系统中生成全局唯一Id
月整理出来,有兴趣的园友可以关注下我的博客. 分享原由,最近公司用到,并且在找最合适的方案,希望大家多参与讨论和提出新方案.我和我的小伙伴们也讨论了这个主题,我受益匪浅啊…… 博文示例: 1. ...
- 协程--gevent模块(单线程高并发)
先恶补一下知识点,上节回顾 上下文切换:当CPU从执行一个线程切换到执行另外一个线程的时候,它需要先存储当前线程的本地的数据,程序指针等,然后载入另一个线程的本地数据,程序指针等,最后才开始执行.这种 ...
- mysql高并发和表类型
高并发:http://www.cnblogs.com/wangchaozhi/p/5061378.html 表类型:http://www.xiaoxiaozi.com/2009/07/14/1171/
- 分布式大数据高并发的web开发框架
一.引言 通常我们认为静态网页html的网站速度是最快的,但是自从有了动态网页之后,很多交互数据都从数据库查询而来,数据也是经常变化的,除了一些新闻资讯类的网站,使用html静态化来提高访问速度是不太 ...
- PHP uniqid 高并发生成不重复唯一ID
http://www.51-n.com/t-4264-1-1.html PHP uniqid()函数可用于生成不重复的唯一标识符,该函数基于微秒级当前时间戳.在高并发或者间隔时长极短(如循环代码)的情 ...
- 【实战Java高并发程序设计 7】让线程之间互相帮助--SynchronousQueue的实现
[实战Java高并发程序设计 1]Java中的指针:Unsafe类 [实战Java高并发程序设计 2]无锁的对象引用:AtomicReference [实战Java高并发程序设计 3]带有时间戳的对象 ...
- 【实战Java高并发程序设计6】挑战无锁算法:无锁的Vector实现
[实战Java高并发程序设计 1]Java中的指针:Unsafe类 [实战Java高并发程序设计 2]无锁的对象引用:AtomicReference [实战Java高并发程序设计 3]带有时间戳的对象 ...
随机推荐
- MYSQL 表结构的修改
-- 修改字段 默认值 ALTER TABLE house_owner ALTER COLUMN addr SET DEFAULT ""; -- 修改字段 名称 COMMENT & ...
- jq实现某个标签内,达到一定字数后,剩下的用 ... 显示
$(".infom_con").each(function(){ var text=$(this).find("a").text(); var len=text ...
- CentOS中输入yum报错:sudo: unable to execute /bin/yum: No such file or directory
今天尝试更新了下虚拟机CentOS中的python版本后. 运行“yum”命令,就报错:“sudo: unable to execute /bin/yum: No such file or direc ...
- jdbc 配置properties实现
package com.web.study; import java.io.InputStream; import java.sql.Connection; import java.sql.Drive ...
- DataTable常用操作
添加列和行的三种方法(转载) 原文地址:http://www.cnblogs.com/jRoger/articles/1887581.html DataTable tblDatas =new Data ...
- 转python编码问题
python的编码问题 http://blog.csdn.net/fuadam/article/details/5547504 分类: .net以外的东东 2010-04-30 21:16 747人阅 ...
- Entity Framework 复杂类型
为了说明什么是复杂属性,先举一个例子. public class CompanyAddress { public int ID { get; set; } public string Compan ...
- Linux系统中的日常监控知识点
1.命令熟悉之w [xiongchao@oc3006745124 Desktop]$ w :: up :, users, load average: 1.48, 1.19, 1.11 USER TTY ...
- cstring 的重载
#include <iostream> #include <windows.h> using namespace std; +; class MyString { public ...
- bzoj 1821: [JSOI2010]Group 部落划分 Group
#include<cstdio> #include<iostream> #include<cmath> #include<algorithm> #def ...