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 # 密文 ...
随机推荐
- Andriod一段时间未操作页面,系统自动登出
功能描述: APP在公共的设备上运行,出于安全考虑,当登录的用户在超过一定时间内没有做任何操作, 则系统自动登出,用户如需重新操作APP,则需要重新登录 . 第一步:创建一个BaseActivity ...
- Andriod Studio设置类默认签名模板
- 关于explorer.exe文件或目录已损坏的问题
2019-5-8 今天由于断电导致电脑异常关机,就出现了开机后屏幕是黑的,只显示鼠标,然后会有警告:explorer.exe目录或文件已损坏. 网上也有各种解决办法,但是都没有清楚,导致捣鼓了半天,首 ...
- Linux进程组和会话
Linux的进程相互之间有一定的关系.比如说,在Linux进程基础中,我们看到,每个进程都有父进程,而所有的进程以init进程为根,形成一个树状结构.我们在这里讲解进程组和会话,以便以更加丰富的方式了 ...
- Bran的内核开发教程(bkerndev)-07 中断描述符表(IDT)
中断描述符表(IDT) 中断描述符表(IDT)用于告诉处理器调用哪个中断服务程序(ISR)来处理异常或汇编中的"int"指令.每当设备完成请求并需要服务事, 中断请求也会调用I ...
- python uiautomator,比 appium 更简单的 app 测试工具
1,场景 在 app 测试的蛮荒时代,如果要进行 app 自动化测试非常麻烦.张大胖如果想做安卓自动化测试,首先必须要学 Java.因为安卓自动化测试都绕不开 google 自己研发的自动化测试框架, ...
- PHP获取当前时间
PHP获取系统当前时间,有date()可以使用. 但date()当前系统时间是格林威治时间,比我们所在的时区晚了整整8个小时.以前处理这个问题时,只是简单的把获取的当前系统的时间戳加上8个小时的时间, ...
- 可爱精灵宝贝:dp
拒绝听搜索.etc水过的.数据太弱了(尽管考场上我凭借数据太水骗了好多分) 我讲的思路和下发的题解一样.(因为我不会所以只能颓它啊) 首先你要相信这题精灵就100个,真的只有100个,这次数据范围没错 ...
- Mybaits 源码解析 (十)----- 全网最详细,没有之一:Spring-Mybatis框架使用与源码解析
在前面几篇文章中我们主要分析了Mybatis的单独使用,在实际在常规项目开发中,大部分都会使用mybatis与Spring结合起来使用,毕竟现在不用Spring开发的项目实在太少了.本篇文章便来介绍下 ...
- Python实现获取IP代码
代码如下: # -*- coding: utf-8 -*- #!/usr/bin/env python # @Time : 2018/5/30 11:05 # @Desc : 获取ip # @File ...