Python: Socket网络编程,多线程处理小Demo
一个简单的例子,深入研究一下socket的多线程处理任务
Server端:
#!/usr/bin/env python #encoding:utf8 # # 注意:定义encoding时必须在第二行import socket import Queue import threading from time import sleephost = "127.0.0.1" port = 60283 timeWait = 3 #定义每个线程处理任务时需要的时间,模拟处理任务 ThreadNum = 10 #定义创建的线程 cache = Queue.Queue(maxsize=1000) #定义一个队列# 处理任务的类 class Server(threading.Thread):def __init__(self, cache, ThreadName):threading.Thread.__init__(self)self.name = ThreadNameself.cache = cachedef run(self):while True:if not cache.empty(): #判断队列是否为空conn, addr = cache.get()data = conn.recv(1024)conn.sendall('success')print 'cacheData: ' + data + '; ThreadName: ' + self.name + '; cacheSize: ' + str(self.cache.qsize())sleep(timeWait)for i in range(ThreadNum):s = Server(cache, str(i))s.setDaemon(True) #设置为守护模式,当主线程退出时,子线程立即退出 s.start()# 创建Socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定socket s.bind((host, port)) # 设置系统最大等待队列,当连接过多时,系统缓存中可以缓存多少连接,不宜设置过大,消耗内存和cpu s.listen(5)while True:# 循环接受,当接受到连接时,把连接放入队列中,由线程获取后执行conn, addr = s.accept()cache.put((conn, addr))conn.close()
Client端:
#!/usr/bin/env python # import socket from time import sleep from threading import Threadhost = "127.0.0.1" port = 60283 num = 100def sirec(s, n):s.sendall('sn:' + str(i))data = s.recv(1024)s.close()for i in range(1, 100):s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect((host, port))t = Thread(target=sirec, args=(s, 1))#t.setDaemon(True) t.start()print 'run over'
关于队列Queue的使用:
q.qsize() 返回队列的大小 q.empty() 如果队列为空,返回True,反之False q.full() 如果队列满了,返回True,反之False q.full 与 maxsize 大小对应 q.get([block[, timeout]]) 获取队列,timeout等待时间 q.get_nowait() 相当q.get(False) 非阻塞 q.put(item) 写入队列,timeout等待时间 q.put_nowait(item) 相当q.put(item, False) q.task_done() 在完成一项工作之后,q.task_done() 函数向任务已经完成的队列发送一个信号 q.join() 实际上意味着等到队列为空,再执行别的操作
转载于:https://www.cnblogs.com/djoker/p/8267547.html
Python: Socket网络编程,多线程处理小Demo相关推荐
- Python Socket网络编程(一)初识Socket和Socket初步使用
目录 前言 网络编程 实质 IP地址和端口 数据传输协议 协议 Socket 概念 套接字 socket对象方法 初步使用 功能 源码 运行结果 结语 前言 本系列博客是笔者学习Python Sock ...
- Python Socket网络编程(二)局域网内和局域网与广域网的持续通信
目录 前言 IP地址 简介 公有IP 私有IP 局域网之间网络通信 前提 功能描述 源码 运行结果 局域网与广域网网络通信 前提 源码 结语 前言 本系列博客是笔者学习Python Socket的过程 ...
- python网络编程讲解_详解Python Socket网络编程
Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...
- python——Socket网络编程(详细讲解)(一)
前言:Socket是计算机之间进行网络通信的一套程序接口,相当于在发送端和接收端之间建立了一个通信管道.在实际应用中,一些远程管理软件和网络安全软件大多依赖于Socket来实现特定功能.本篇主要讲解T ...
- python socket 网络编程
socket 套接字:网络接口. 我们在网络上需要传输自己需要的数据,我们在网络上传输数据使用的是网络协议, 而套接字就是我们将数据从本地采用协议传输的接口 socket模型: socket族: #A ...
- Linux下的Python Socket网络编程(聊天机器人)
转载文章: https://blog.csdn.net/slavik_/article/details/82430717
- Python面向对象进阶和socket网络编程
写在前面 为什么坚持?想一想当初: 一.面向对象进阶 - 1.反射补充 - 通过字符串去操作一个对象的属性,称之为反射: - 示例1: class Chinese:def __init__(self, ...
- python编程入门与案例详解-Pythony运维入门之Socket网络编程详解
Socket是什么? Socket 是电脑网络中进程间数据流的端点Socket 是操作系统的通信机制应用程序通过Socket进行网络数据的传输 首先,简单了解一下TCP通信过程: TCP三次握手(面试 ...
- python socket mysql_5.Python操作MySQL,三层架构,Socket网络编程
Python操作MySQL - MySQL之查询操作 - MySQL之插入数据 - MySQL之批量插入数据 - MySQL之删除数据 - MySQL之更新数据库 - MySQL之事务 - MySQL ...
- python运维开发之socket网络编程01
python运维开发之socket网络编程01说明:本文来自来自北京老男孩linux运维实战培训中心-运维开发课程免费视频内容,本文内容为系列内容,更多分享信息见:http://oldboy.blog ...
最新文章
- 修改web.config
- 3.6.4python下载安装教程_python 3.6.4安装教程
- 2021计算机应用基础形考答案模块2,国家开放大学计算机应用基础模块2形考答案-20210603091431.docx-原创力文档...
- th:text=“${user?.name}“ ${?.}
- makefile 无法工作_什么是Makefile,它如何工作?
- python turtle画小狗_python-turtle-画雪花
- 数据分析进阶 - 评分模型权重计算方法
- iconfont-阿里巴巴矢量图标在界面中无法正常显示,表现为一个方块。
- ListView分页显示数据
- 【网络协议趣谈】DNS协议域名解析和负载均衡
- NPOI导出真正的电子表格,支持 自定义多行表头(表头风格设置),支持多个sheet页面导出
- php后门文件,php后门屌炸天
- Xilinx Xio控制sdr sdram
- 机器学习 贝叶斯分类器 拉普拉斯修正
- 提高办公协同效率,Tracup可能是最好的选择
- HTML-简单表格制作
- BLE MESH组网(四)安全概述
- 在 linux 中管理罗技优联接收器
- 战意显示与服务器断开连接,战意不删档6.8开启 服务器竟然可以这样开
- RabbitMQ入门到掌握
热门文章
- mysql的代码大全_MySql数目字函数大全
- Java异常日志的查询语句_java学习异常,断言和日志
- system类的 静态方法可以启动垃圾回收器。_Java—System类入门学习
- python计算组合数_Python实现的排列组合计算操作示例
- CentOS 7.6 安装 Maven 3.6.3
- python tqdm进度条打印
- git reset --hanrd撤回_一篇文章,全面掌握Git
- linux u盘新建文件夹加密,linux磁盘的加密保护以及u盘加密的方法。
- $.ajax 发送请求,JavaScript之Ajax-2 Ajax(使用Ajax发送get请求、使用Ajax发送post请求)
- java 闹钟_JAVA可视化闹钟源码