python用select方式实现io复用对服务端发起大量连接(短连接)
2017-09-12 16:47
615 查看
我们知道的大多数io复用方式都是在服务端接受连接的时候进行,
但如果要进行压测,则需要客户端发起连接的时候用,那么要怎么用呢,看下文
短连接情况下
但如果要进行压测,则需要客户端发起连接的时候用,那么要怎么用呢,看下文
短连接情况下
def select_run(self): used= 0 rlist=[] trans_dict={} start_time_dict={} num_of_socket =0 while used < self.run_time: used = time.time() - self.start_time error = '' if num_of_socket < self.max_socket: trans = self.trans_init() if trans == "err": continue rlist.append(trans.sockfd) trans_dict[trans.sockfd] = trans start_time_dict[trans.sockfd] = self.default_timer() num_of_socket +=1 while qps_control.use_QPS_NUM(): used = time.time() - self.start_time if used >self.run_time: break time.sleep(0.001) try: if used <self.run_time: trans.client_send() self.count_dict["send"] += 1 except Exception, e: error = str(e).replace(',', '') r_list, w_list, e_list = select.select(rlist, [], rlist, 0.001) for conn in r_list: try: trans_dict[conn].client_recv() self.count_dict["recv"] += 1 except Exception, e: error = str(e).replace(',', '') scriptrun_time = self.default_timer() - start_time_dict[conn] start_time_dict.pop(conn) elapsed = time.time() - self.start_time epoch = time.mktime(time.localtime()) fields = (elapsed, epoch, self.user_group_name, scriptrun_time, error, trans_dict[conn].custom_timers) self.queue.put(fields) rlist.remove(conn) trans_dict[conn].client_close() trans_dict.pop(conn) num_of_socket -=1 for conn in e_list: print "some err conn" rlist.remove(conn) trans_dict[conn].client_close() trans_dict.pop(conn) num_of_socket -= 1 for fd,trans in trans_dict.items(): trans.client_close()
def trans_init(self): trans = self.script_module.test() trans.custom_timers = {} # scripts have access to these vars, which can be useful for loading unique beatles_data trans.thread_num = self.thread_num trans.process_num = self.process_num try: trans.client_open() trans.sockfd.setblocking(self.block_flag) # 设置阻塞非阻塞 True为阻塞,False为非阻塞 trans.sockfd.settimeout(self.timeout_ms) #设置socket超时,None为不设置超时 # print self.block_flag,self.timeout_ms except Exception, e: # test runner catches all script exceptions here return "err" trans.request = self.data_list[self.count_dict["send"] % len(self.data_list)] return trans
相关文章推荐
- python用select方式实现io复用对服务端发起大量连接(长连接)
- python用epoll方式实现客户端对服务端发起大量连接(长连接)
- python用epoll方式实现客户端对服务端发起大量连接(短连接)
- 三种多路复用IO实现方式:select,poll,epoll的区别
- 利用select实现IO多路复用TCP服务端
- 三种多路复用IO实现方式:select,poll,epoll的区别
- 三种多路复用IO实现方式:select,poll,epoll的区别
- 003.同时Ping多个IP(select实现IO复用,信号计时),ping程序升级版
- python IO多路复用之select
- socket编程---之多连接服务端实现(多线程方式)
- 第十七篇:IO复用之select实现
- 使用select实现网络的多路IO复用
- Python实现string字符串连接的方法总结【8种方式】
- TCP IO复用 select并发服务端 Linux socket编程入门(3)
- socket编程---之多连接服务端实现(select函数方式)
- 用python做服务端时实现守候进程的那些方式 推荐
- python之旅九-1【第九篇】IO多路复用以及select
- Socket---基于IO复用实现异步非阻塞通信 Python群聊工具
- 多路复用IO实现方式:select,poll,epoll的区别
- 利用Python实现对linux服务器SSH远程连接和系统操作的几种方式