一个简单的例子,深入研究一下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相关推荐

  1. Python Socket网络编程(一)初识Socket和Socket初步使用

    目录 前言 网络编程 实质 IP地址和端口 数据传输协议 协议 Socket 概念 套接字 socket对象方法 初步使用 功能 源码 运行结果 结语 前言 本系列博客是笔者学习Python Sock ...

  2. Python Socket网络编程(二)局域网内和局域网与广域网的持续通信

    目录 前言 IP地址 简介 公有IP 私有IP 局域网之间网络通信 前提 功能描述 源码 运行结果 局域网与广域网网络通信 前提 源码 结语 前言 本系列博客是笔者学习Python Socket的过程 ...

  3. python网络编程讲解_详解Python Socket网络编程

    Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...

  4. python——Socket网络编程(详细讲解)(一)

    前言:Socket是计算机之间进行网络通信的一套程序接口,相当于在发送端和接收端之间建立了一个通信管道.在实际应用中,一些远程管理软件和网络安全软件大多依赖于Socket来实现特定功能.本篇主要讲解T ...

  5. python socket 网络编程

    socket 套接字:网络接口. 我们在网络上需要传输自己需要的数据,我们在网络上传输数据使用的是网络协议, 而套接字就是我们将数据从本地采用协议传输的接口 socket模型: socket族: #A ...

  6. Linux下的Python Socket网络编程(聊天机器人)

    转载文章: https://blog.csdn.net/slavik_/article/details/82430717

  7. Python面向对象进阶和socket网络编程

    写在前面 为什么坚持?想一想当初: 一.面向对象进阶 - 1.反射补充 - 通过字符串去操作一个对象的属性,称之为反射: - 示例1: class Chinese:def __init__(self, ...

  8. python编程入门与案例详解-Pythony运维入门之Socket网络编程详解

    Socket是什么? Socket 是电脑网络中进程间数据流的端点Socket 是操作系统的通信机制应用程序通过Socket进行网络数据的传输 首先,简单了解一下TCP通信过程: TCP三次握手(面试 ...

  9. python socket mysql_5.Python操作MySQL,三层架构,Socket网络编程

    Python操作MySQL - MySQL之查询操作 - MySQL之插入数据 - MySQL之批量插入数据 - MySQL之删除数据 - MySQL之更新数据库 - MySQL之事务 - MySQL ...

  10. python运维开发之socket网络编程01

    python运维开发之socket网络编程01说明:本文来自来自北京老男孩linux运维实战培训中心-运维开发课程免费视频内容,本文内容为系列内容,更多分享信息见:http://oldboy.blog ...

最新文章

  1. 修改web.config
  2. 3.6.4python下载安装教程_python 3.6.4安装教程
  3. 2021计算机应用基础形考答案模块2,国家开放大学计算机应用基础模块2形考答案-20210603091431.docx-原创力文档...
  4. th:text=“${user?.name}“ ${?.}
  5. makefile 无法工作_什么是Makefile,它如何工作?
  6. python turtle画小狗_python-turtle-画雪花
  7. 数据分析进阶 - 评分模型权重计算方法
  8. iconfont-阿里巴巴矢量图标在界面中无法正常显示,表现为一个方块。
  9. ListView分页显示数据
  10. 【网络协议趣谈】DNS协议域名解析和负载均衡
  11. NPOI导出真正的电子表格,支持 自定义多行表头(表头风格设置),支持多个sheet页面导出
  12. php后门文件,php后门屌炸天
  13. Xilinx Xio控制sdr sdram
  14. 机器学习 贝叶斯分类器 拉普拉斯修正
  15. 提高办公协同效率,Tracup可能是最好的选择
  16. HTML-简单表格制作
  17. BLE MESH组网(四)安全概述
  18. 在 linux 中管理罗技优联接收器
  19. 战意显示与服务器断开连接,战意不删档6.8开启 服务器竟然可以这样开
  20. RabbitMQ入门到掌握

热门文章

  1. mysql的代码大全_MySql数目字函数大全
  2. Java异常日志的查询语句_java学习异常,断言和日志
  3. system类的 静态方法可以启动垃圾回收器。_Java—System类入门学习
  4. python计算组合数_Python实现的排列组合计算操作示例
  5. CentOS 7.6 安装 Maven 3.6.3
  6. python tqdm进度条打印
  7. git reset --hanrd撤回_一篇文章,全面掌握Git
  8. linux u盘新建文件夹加密,linux磁盘的加密保护以及u盘加密的方法。
  9. $.ajax 发送请求,JavaScript之Ajax-2 Ajax(使用Ajax发送get请求、使用Ajax发送post请求)
  10. java 闹钟_JAVA可视化闹钟源码