一丶python2和python3的区别
1.编码&字符串
字符串:
python2:
Unicode v = u"root" 本质上用unicode存储(万国码)
(str/bytes) v = "root" 本质用字节存储
python3:
str v = "root" 本质上用unicode存储(万国码)
bytes v = b"root" 本质上用字节存储
编码:
python2: ascii 文件头可以修改#-*- encoding:utf-8 -*-
python3: utf-8 文件头可以修改#-*- encoding:utf-8 -*-
2.继承
python2: 经典类/新式类
python3: 新式类
3.范围
python2: range/xrange
python3: range
4.输入
python2: v1 = raw_input("请输入用户名")
python3: v2 = input("请输入用户名")
5.打印
python2: print"XXX"
python3: print("XXX")
二丶网络编程
1.mac
mac地址是固定的存在于网卡上.每台电脑都不一样
2.DHCP
DHCP是一个局域网的网络协议,存在于路由器或交换机中,该协议可以自动的为我们分配IP
有局域网,广域网,城域网
ARP协议:ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。
3.DNS
网络连接:
域名解析:
每一个域名后面都有其对应的IP地址,如:
www.baidu.com 111.13.100.91
www.qq.com 111.30.132.101
连接时:
sk = socket.socket()
sk.connect(("111.13.100.91",8080))....
问题来了,域名和IP的对应关系在哪里?
本地:
Win本地电脑:
C:\Windows\System32\drivers\etc\hosts中
Linux/Mac电脑:
/etc/hosts中
DNS服务器: 全球*的DNS服务器只有十三台
三丶socketserver和多线程
socketserver
对照图看源码:
执行serve_forever的相关代码:
2.多线程
在多线程的操作系统中,通常是在一个进程中包括多个线程,每个线程都是作为利用CPU的基本单位,是花费最小开销的实体。
import time import threading def task(a1,a2,a3): time.sleep(3) 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('耍贱...')
线程好比一个人同时做多件事,就跟孙悟空一样,来一个需求,就把根毛变成自己去做那件事了,再来一个需求就再拔一根变成自己去做,之间互不干扰.有了多线程我们服务器就可以为多个用户同时服务了
示例:我么可以模拟很多人给服务器请求,让服务器去执行,每个请求10秒后完成.代码如下
import time import threading def task(n): print('开始执行任务:',n) time.sleep(10) print('...') print('任务%s 执行完毕:'%n) while True: name = input("请输入任务:") t = threading.Thread(target=task,args=(name,)) t.start()
多个任务同时进行,并且互不干扰