我的编程空间,编程开发者的网络收藏夹
学习永远不晚

【Python之旅】第五篇(三):Pyt

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

【Python之旅】第五篇(三):Pyt

    前面的几个例子都是单线程的,下面再来说说多线程的。


1.多线程模块

    主要是socketserver模块,如下图示:

wKiom1YPmb2TPBqQAAJlgI3CCPk647.jpg


2.多线程原理

    如下图示说明:

wKioL1YPmgyj_atyAAIZT9TernQ085.jpg


3.SockteServer例子说明

服务器端:

wKiom1YPmkjiaEvhAALY_XJdPtI659.jpg


客户端:

wKioL1YPmnahMs6AAAGY8lr71ok291.jpg


4.演示

    还是以前面例子,对代码进行修改,作如下的演示。

Server端:

import SocketServer            #导入SocketServer,多线程并发由此类实现

class MySockServer(SocketServer.BaseRequestHandler):    #定义一个类

	def handle(self):      #handle(self)方法是必须要定义的,可以看上面的说明
		print 'Got a new connection from', self.client_address
		while True:
			data = self.request.recv(1024)    #需要通过self的方法调用数据接收函数
			if not data:break
			print 'recv:', data

			self.request.send(data.upper())   #需要通过self的方法调用数据接收函数

if __name__ == '__main__':    #并非一定要用这样的方式,只是建议这样使用
	HOST = ''             #定义侦听本地地址口(多个IP地址情况下),这里表示侦听所有
	PORT = 50007          #Server端开放的服务端口
	s = SocketServer.ThreadingTCPServer((HOST, PORT), MySockServer)
                              #调用SocketServer模块的多线程并发函数
	s.serve_forever()     #持续接受客户端的连接

Client端:

import socket

HOST = '192.168.1.13'
PORT = 50007
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))

while True:
	user_input = raw_input('msg to send:').strip()
	s.sendall(user_input)
	data = s.recv(1024)
	print 'Received', repr(data)

s.close()

演示:

步骤1:Server端运行服务端程序

xpleaf@xpleaf-machine:/mnt/hgfs/Python/day5$ python Thread_socket_server4.py 
===>光标在此处处于等待状态

步骤2:Client A端运行客户端程序

xpleaf@xpleaf-machine:/mnt/hgfs/Python/day5$ python client4.py 
msg to send:Hello!    ===>User输入数据
Received 'HELLO!'     ===>Server端返回的数据
msg to send:I'm Client A.
Received "I'M CLIENT A."
msg to send:          ===>继续等待User输入数据

步骤3:在Server端中观察现象

xpleaf@xpleaf-machine:/mnt/hgfs/Python/day5$ python Thread_socket_server4.py 
Got a new connection from ('192.168.1.13', 52650)
recv: Hello!        
recv: I'm Client A.    ===>接收到Client A端发送的数据
===>光标在此处处于等待状态
步骤4:Client B端运行客户端程序
xpleaf@xpleaf-machine:/mnt/hgfs/Python/day5$ python client4.py 
msg to send:I'm Client B.    ===>User输入数据
Received "I'M CLIENT B."     ===>Server端返回的数据
msg to send:                 ===>继续等待User输入数据

步骤5:在Server端中观察现象

xpleaf@xpleaf-machine:/mnt/hgfs/Python/day5$ python Thread_socket_server4.py 
Got a new connection from ('192.168.1.13', 52650)
recv: Hello!
recv: I'm Client A.
Got a new connection from ('192.168.1.13', 52651)
recv: I'm Client B.    ===>接收到Client A端发送的数据
===>光标在此处处于等待状态

    通过上面的演示,使用SocketServer便可以实现Python Socket的多线程并发。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

【Python之旅】第五篇(三):Pyt

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

【Python之旅】第五篇(三):Pyt

前面的几个例子都是单线程的,下面再来说说多线程的。1.多线程模块    主要是socketserver模块,如下图示:2.多线程原理    如下图示说明:3.SockteServer例子说明服务器端:客户端:4.演示    还是以前面例子,
2023-01-31

【Python之旅】第五篇(一):Pyt

只要和网络服务涉及的,就离不开Socket以及Socket编程,下面就说说Python Socket通信的基本原理。1.Socket    socket也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过“套接字”
2023-01-31

【Python之旅】第五篇(二):Pyt

前面第五篇(一)中的一个Socket例子其实就是单线程的,即Server端一次只能接受来自一个Client端的连接,为了更好的说明socket单线程和阻塞模式,下面对前面的例子做修改。1.单线程+阻塞+交互式    前面的例子是单线程阻塞和
2023-01-31

【Python之旅】第三篇(三):Pyt

说明:    Python的正则表达式功能强大,使用灵活,但由于目前对Python中正则表达式的使用和认识都比较浅,因此急于做笔记和总结显然是不可行的,因此,这里给出下面几篇不错的参考文档:1.较为详细的Python正则表达式功能介绍的文档
2023-01-31

【Python之旅】第四篇(三):Pyt

终于是来到了Python的面向对象编程,以前是没有接触过其它的面向对象编程的语言,因此学习这一部分是相当带劲的,这里也总结一下。1.面向对象编程的相关名词及解释    世界万物,皆可分类,一切皆为对象。    所谓的面向对象编程,指的是一种
2023-01-31

【Python之旅】第六篇(三):Pyt

学习Python的多线程(Multi-threading),至少应该要有进程与线程的基本概念,可以看我转载的一篇文章:《进程与线程的一个简单解释》。    在前面使用Python Socket来编写简版SSH程序的时候,其实已经有使用多线程
2023-01-31

【Python之旅】第六篇(四):Pyt

在多线程程序执行过程中,为什么需要给一些线程加锁以及如何加锁,下面就来说一说。1.给线程加锁的原因    我们知道,不同进程之间的内存空间数据是不能够共享的,试想一下,如果可以随意共享,谈何安全?但是一个进程中的多个线程是可以共享这个进程的
2023-01-31

【Python之旅】第二篇(一):Pyt

说明:    主要是file()和open()函数的使用,但在查open()函数的帮助时,会有下面的说明:>>> help(open)……Open a file using the file() type, returns a file o
2023-01-31

【Python之旅】第四篇(一):Pyt

有时候拿到一个程序接口,需要对其进行扩展,但是又不能修改原来接口的源代码,这时候就需要使用装饰器了。    有下面一个小程序,假如是别人提供给我们的调用接口:import timedef sayHi():        time.sleep
2023-01-31

【Python之旅】第四篇(二):Pyt

在Python程序的执行过程中,难免会出现异常的情况,如果做的是跟用户交互的程序,当用户输入不可接受的内容时,在可预见的范围内,我们当然是希望可以给用户一些提示,而不是原来Python内置异常中的那些提示语句,毕竟那些语句只适合给程序员做调
2023-01-31

【Python之旅】第六篇(六):Pyt

关于进程与线程的对比,下面的解释非常好的说明了这两者的区别:    这里主要说明关于Python多进程的下面几点:1.多进程的使用方法2.进程间的通信之multiprocessing.Manager()使用3.Python进程池(1)比较简
2023-01-31

【Python之旅】第五篇(四):基于P

还是继续延续篇五中前三节的例子,通过对代码的修修补补,把它改成一个可以在连接后就能在Client端执行Server端命令的程序,所以就有点类似于SSH连接程序了。    至于还是用前面的例子来改嘛,是因为上课也一直这么干,而且老师也讲得非常
2023-01-31

Python之路【第五篇】:Python

一、文件操作1、介绍计算机系统分为:计算机硬件,操作系统,应用程序三部分。我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序是无法直接操作硬件的,这就用到
2023-01-31

【Python之旅】第七篇(一):再谈P

主要是再进一步加深Python中关于多线程相关函数join()的理解以解多线程的执行过程。这里通过下面的例子来作进一步的说明。1.多线程与主程序代码的执行顺序关系    给出下面程序代码:#!/usr/bin/env pythonimpor
2023-01-31

python学习 第五篇 flask

#!/usr/bin/env python#coding:utf-8from flask import Flask,request,render_template,redirect#request 里面包含一次网络请求所有的内容,所有url
2023-01-31

python学习之旅(十五)

一、装饰器decorator:本质上就是函数,可以增强函数的功能。定义起来虽然有点复杂,但使用起来非常灵活和方便1、不修改被装饰函数的源代码2、不修改被装饰函数的调用方式3、装饰函数对被装饰函数透明import functoolsdef l
2023-01-30

Python学习之旅(三十三)

网络通信是两台计算机上的两个进程之间的通信,而网络编程就是如何在程序中实现两台计算机的通信P协议负责把数据从一台计算机通过网络发送到另一台计算机TCP协议则是建立在IP协议之上的。TCP协议负责在两台计算机之间建立可靠连接,保证数据包按顺序
2023-01-30

Python学习之旅(二十五)

正则表达式:检查一个字符串是否与某个模式匹配\d :匹配数字\w :匹配字母或数字. :匹配任意字符{n} :匹配n个字符{m,n} :匹配m到n个字符\s :匹配空格a|b :匹配a或b^ :匹配字符串开头$ :匹配字符串结尾* :匹配0
2023-01-30

Python之路【第七篇】:Python

一、装饰器1、装饰器的概念#装饰器定义:本质就是函数,功能是为其他函数添加附加功能二、装饰器需要遵循的原则#原则:1、不修改被修饰函数的源代码2、不修改被修饰函数的调用方式装饰器他人的器具,本事可以是任意可调用对象,被装饰者也可以是任意可调
2023-01-31

Python之路【第八篇】:Python

一、模块和包模块(module)的概念:在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码会越来越长,越来越不容易维护。为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录