一丶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:WindowsSystem32driversetchosts中
Linux/Mac电脑:
/etc/hosts中
DNS服务器: 全球顶级的DNS服务器只有十三台
三丶socketserver和多线程
socketserver
对照图看源码:
![](https://images2018.cnblogs.com/blog/1449846/201809/1449846-20180906163745958-1544430460.png)
执行serve_forever的相关代码:
![](https://images2018.cnblogs.com/blog/1449846/201809/1449846-20180906163900977-1750938857.png)
![](https://images2018.cnblogs.com/blog/1449846/201809/1449846-20180906163734520-939397008.png)
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()
![](https://images2018.cnblogs.com/blog/1449846/201809/1449846-20180906165052090-249080794.png)
多个任务同时进行,并且互不干扰