day 30 多线程 socketserver模块补充
内容回顾:
socket 模块
服务端:收发数据 - > accept/recv
客户端:收发数据 -> connect/recv
- 1. 考试题
- 1. 解释性和编译型
- 编译型:
- 先把代码编译成机器码 -> 计算机寄存器去运行 :C语言
- 先把代码编译成XXX -> 计算机找虚拟机执行代码->机器码交给计算技巧去运行 :C语言、java、C#
- 解释型:
- 边解释边执行
- def func():
- print(name)
- print(666)
- 4.
- 列表: ''.join(['xx','ff'])
- 字符串:list('xxxxxxxx') / split
- 5. v[::-1]
- 7. py2/py3
- - 编码&字符串
- 字符串:
- py2:
- unicode v = u"root" 本质上用unicode存储(万国码)
- (str/bytes) v = "root" 本质用字节存储
- py3:
- str v = "root" 本质上用unicode存储(万国码)
- bytes v = b"root" 本质上用字节存储
- 编码:
- py2:
- - ascii
- 文件头可以修改:#-*- encoding:utf-8 -*-
- py3:
- - utf-8
- 文件头可以修改:#-*- encoding:utf-8 -*-
- 注意:文件是如何存储?
- - 继承
- py2: 经典类/新式类
- py3: 新式类
- - 范围
- py2:range/xrange
- py3: range
- - 输入
- py2: v1 = raw_input('请输入用户名:')
- py3: v2 = input('请输入用户名:')
- - 打印
- py2: print 'xx'
- py3: print(123)
- 9. 以后写元组:
- v = (1,2,3,)
- Django框架静态文件配置
- 2. 网络编程
- 1. 我的电脑有网卡,网卡里有mac地址
- 2. 我到某个地方插上网线,路由器或交换机中的DHCP服务为我自动分配IP地址。
- IP: 192.168.13.84
- IPv4
- 00000000.00000000.00000000.00000000
- 0~255 0~255 0~255 0~255
- IPv6
- 00000000.00000000.00000000.00000000.00000000.00000000
- 子网掩码:255.255.255.0
- 192.168.13.84
- 255.255.255.0
- 192.168.12.84
- 255.255.255.0
- 网关IP:192.168.13.1
- 局域网内、城域网、广域网:
- 广播
- 单播
- 广播风暴
- arp协议
- 3. DNS
- 网络连接:
- - 域名解析
- www.luffycity.com 47.95.64.113
- www.oldboyedu.com 101.200.195.98
- - 连接
- sk = socket.socket()
- sk.connect(('47.95.64.113',80))
- ...
- 问题来了,域名和IP的对应关系在哪里?
- 本地:
- Win本地电脑:
- C:\Windows\System32\drivers\etc\hosts
- 11.11.11.11 luffycicy.com
- Linux/Mac电脑:
- /etc/hosts
- DNS服务器:全球顶级DNS服务器13台
- www.luffycity.com 47.95.64.113
- 创业:
- a. 租一个服务器+公网IP
- b. 租域名
- 域名+IP解析
- 总结:
- 1. DHCP,自动位局域网内容电脑分配IP。
- 2. 网关,路由器中连接交换机的口。
- 3. IP,4个点分的十进制表示 192.11.111.11
- 4. 子网掩码,
- IP: 192.168.13.99
- 掩码:255.255.255.0
- 将挡住的IP位数作为网段。
- 未挡住的部分作为可变的值。
- 5. 局域网/城域网/广域网
- 6. arp协议
- 7. DNS
- 3. 多线程
- 4. socketserver
- 注意:以后如果想要提高效率可以使用多线程。
- """
- pip3 install requests
- """
- import threading
- import requests
- import uuid
- url_list = [
- 'https://www3.autoimg.cn/newsdfs/g28/M05/F9/98/120x90_0_autohomecar__ChsEnluQmUmARAhAAAFES6mpmTM281.jpg',
- 'https://www2.autoimg.cn/newsdfs/g28/M09/FC/06/120x90_0_autohomecar__ChcCR1uQlD6AT4P3AAGRMJX7834274.jpg',
- 'https://www2.autoimg.cn/newsdfs/g3/M00/C6/A9/120x90_0_autohomecar__ChsEkVuPsdqAQz3zAAEYvWuAspI061.jpg',
- ]
- def task(url):
- """"""
- """
- 1. DNS解析,根据域名解析出IP
- 2. 创建socket客户端 sk = socket.socket()
- 3. 向服务端发起连接请求 sk.connect()
- 4. 发送数据(我要图片) sk.send(...)
- 5. 接收数据 sk.recv(8096)
- 接收到数据后写入文件。
- """
- ret = requests.get(url)
- file_name = str(uuid.uuid4()) + '.jpg'
- with open(file_name, mode='wb') as f:
- f.write(ret.content)
- for url in url_list:
- t = threading.Thread(target=task,args=(url,))
- t.start()
考试讲解
多线程:
就是分出多个我,取同时执行任务,提高程序的执行效率。
- import threading
- def task(a,b,c):pass
- def play():psaa
- t1 = threading.Thread(target=task,args=(1,2,3,)) #分身一(创建一个线程,让线程取执行函数)
- t1.start() #执行
- t2 = threading.Thread(target=play) #分身二
- t2.start()
#创建的线程位子线程,直接往下走的是函数的主线程
- # by luffycity.com
- import time
- import threading
- def task(a1,a2,a3):
- time.sleep(2)
- print('拿快递')
- def play():
- print('和女朋友去耍')
- def wm():
- print('去拿外卖')
- # 创建一个线程
- # 让该线程去执行任务:函数
- t1 = threading.Thread(target=task,args=(1,2,3,))
- # 去执行吧
- t1.start()
- # 创建一个线程
- # 让该线程去执行任务:函数
- t2 = threading.Thread(target=play)
- # 去执行吧
- t2.start()
- # 创建一个线程
- # 让该线程去执行任务:函数
- t3 = threading.Thread(target=wm)
- # 去执行吧
- t3.start()
- print('玩扇子')
- print('煽风点火')
- print('耍贱...')
代码详细
socket和线程的配合:
- import time
- import socket
- import threading
- def task(conn):
- time.sleep(20)
- data = conn.recv(1024)
- print(data)
- conn.close()
- server = socket.socket()
- server.bind(('192.168.13.84',8001,))
- server.listen(5)
- while True:
- conn,addr = server.accept()
- t = threading.Thread(target=task,args=(conn,))
- t.start()
- import socketserver
- class MyServer(socketserver.BaseRequestHandler):
- def handle(self):
- self.request
- self.client_address
- self.server
- # 编写代码
- server = socketserver.ThreadingTCPServer(('192.168.13.84',8001,),MyServer)
- """
- server.server_address = server_address
- server.RequestHandlerClass = RequestHandlerClass
- server.__is_shut_down = threading.Event()
- server.__shutdown_request = False
- server.socket = socket....
- - socket.bind
- - socket.listen
- """
- server.serve_forever()
解析socket源码
uuid模块
每次执行都会生成一个随机字符串
应用:当文件名(接受的文件随机赋值一个文件名)
- import uuid
- v = str(uuid.uuid4())
- print(v)
day 30 多线程 socketserver模块补充的更多相关文章
- 网络编程 多线程/socketserver模块/ threading.local
线程:进程中负责程序执行的执行单元. 多线程:在1个进程中存在多个线程. 进程只是用来把资源集中在一起,而线程才是cpu上的执行单位. 每个进程都会默认有一个控制线程也叫作主线程. 进程之间是竞争关系 ...
- Python网络编程(3)——SocketServer模块与简单并发服务器
主要类型 该模块有四个比较主要的类,其中常用的是 TCPServer 和 UDPServer. 1. TCPServer 2. UDPServer 3. UnixStreamServer,类似于TCP ...
- 第二十九天- socketserver模块 ftp上传
1.socketserver模块: socketserver,它提供了服务器中心类,可简化网络服务器的开发,内部使用IO多路复用以及“多线程”和“多进程”,从而实现并发处理多个客户端请求的socket ...
- python 网络编程之socket开发和socketserver模块
一 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构 互联网中处处是C/S架构 如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种) 腾讯作为服务端为你提供视频 ...
- [并发编程 - socketserver模块实现并发、[进程查看父子进程pid、僵尸进程、孤儿进程、守护进程、互斥锁、队列、生产者消费者模型]
[并发编程 - socketserver模块实现并发.[进程查看父子进程pid.僵尸进程.孤儿进程.守护进程.互斥锁.队列.生产者消费者模型] socketserver模块实现并发 基于tcp的套接字 ...
- socket 和 SocketServer 模块
一 .Socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket socket(TCP,IP)通常也称作"套接字",用于描述IP地址和端 ...
- SocketServer模块
在利用select实现伪并发的socket博文中我们说了: 如果要实现一个server端可以和多个客户端进行通信可以使用 1.多线程 2.多进程 3.select I/O多路复用 在那篇博文中我们介绍 ...
- 浅析python中socketserver模块使用
虽然说用python编写简单的网络程序狠方便,但是复杂一点的网络程序还是用现成的框架比较好,这样就可以专心事物逻辑,而不是套接字的各种细节.Socketserver模块简化了编写网络服务程序,同时so ...
- SocketServer模块,hmac模块验证client合法性
hmac模块: 1.模块初识: import hmac # h = hmac.new() #括号里要给它连个bytes类型,一个是自定义的secret_key,一个是你想进行加密的bytes # 密文 ...
随机推荐
- ansible剧本之playbook操作
ansible 剧本 yaml介绍: 是一个编程语言 文件后缀名 yaml yml 数据对应格式: 字典: key: value 列表: [] - ansible-playbook命令格式 执行顺序: ...
- Flask+WebSocket实现群聊与单聊功能
在开始我们的程序代码之前,先来了解一下相关的基础知识: 1.什么是websocket? (1)WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议.WebSocket ...
- Linux Cannot allocate memory问题
查找了一下相关文档,发现这个错误的含义其实就是像它自己说的,没法分配内存了. The problem is inherent with the way Java allocates memory wh ...
- 学习笔记之javascript编写简单计算器
感觉自己的的实力真的是有待提高,在编写计算器的过程中,出现了各种各样的问题,暴露了自己的基础不扎实,逻辑思维能力不够,学得知识不能运用到自己的demo中区.先介绍一些这个这个计算器的整体思路.大致 ...
- MIT线性代数:3.矩阵相乘
- Ubuntu18.04 安装在VMware 14中无法全屏问题解决
现象:在安装完Ubuntu18.04后发现在虚拟机中不能全屏,安装Vmware Tools后还是无法解决,修改分辨率亦不成功. 原因:WAYLAND限制 解决方法:取消ubuntu中的显示设备WAYL ...
- Asp.Net终于可以在龙芯服务器上运行啦:Jexus成功完成对国产系列CPU的适配
为了确保我国信息化建设“安全可靠”,使用国产关键系统.关键应用.关键软硬件替代国外信息技术产品,已经在党政部门.国营企事业单位得到了进一步落实.过去运行于 Windows 服务器的 Web 应用程序, ...
- 8.3 NOIP CE反思
lsc考完以后就CE了,然后滚回去吃*去了! 这次考试都比的一批,整个先是打了暴力然后对拍发现桶有可能炸内存,然后就打了一个hash-map然后......T1 T3全使用了它,结果: 没什么可说的了 ...
- php imagick svg转成jpg
php imagick svg转成jpg <pre> public function svgtojpg() { $image = '<?xml version="1.0&q ...
- [Office] VBA Practice
1. 使用DateTimePicker控件 VBA中默认的User Form的Toolbox中的控件并不包含DateTimePicker,是接受时间相关数据的输入,在Toolbox上右击“Additi ...