TCP/IP 协议栈是一系列网络协议的总和,是构成网络通讯的核心骨架,它定义了电子设备如何连入因特网,以及数据如何在它们之间进行传输。TCP/IP 协议采用4层结构,分别是应用层、传输层、网络层和链路层,每一层都呼叫它的下一层所提供的协议来完成本身的需求。因为咱们大部分时间都工做在应用层,下层的事情不用咱们操心;其次网络协议体系自己就很复杂庞大,入门门槛高,所以很难搞清楚TCP/IP的工做原理,通俗一点讲就是,一个主机的数据要通过哪些过程才能发送到对方的主机上。python
200 (成功)201 (已建立) 202 (已接受) 203 (非受权信息)204 (无内容) 205 (重置内容)206 (部份内容)300 (多种选择)301 (永久移动)302 (临时移动)303 (查看其余位置)304 (未修改)305 (使用代理)307 (临时重定向)400 (错误请求)401 (未受权)403 (禁止)404 (未找到)405 (方法禁用) 406 (不接受) 407 (须要代理受权)408 (请求超时) 409 (冲突) 410 (已删除)411 (须要有效长度)mysql
num = sum(range(1,101))
a = 1
def add():
global a
a = a + 1
print(a)
add()
os | 操做系统 |
---|---|
time | 时间 |
random | 随机 |
pymysql | 链接数据库 |
threading | 线程 |
multiprocessing | 进程 |
queue | 队列 |
#方法一:
d1 = {'usr':'zhangxin', 'pwd':'123456'}
d2 = {'ip':'127.0.0.1', 'port': '8000'}
d3 = dict(d1, **d2)
print(d3)
#方法二:
d1 = {'usr':'zhangxin', 'pwd':'123456'}
d2 = {'ip':'127.0.0.1', 'port': '8000'}
d3 = {}
d3.update(d1)
d3.update(d2)
#方法三:
d1 = {'usr':'zhangxin', 'pwd':'123456'}
d2 = {'ip':'127.0.0.1', 'port': '8000'}
d3 = {}
for k, v in d1.items():
d3[k] = v
for k, v in d2.items():
d3[k] = v
print(d3)
print(d3)
li = [1, 2, 3, 4, 1, 2]
s = set(li)
li = list(s)
print(li)
#方法一:__new__
class Borg(object):
def __new__(cls, *args, **kwargs):
if not hasattr(cls, '_instance'):
ob = super(Borg, cls)
cls._instance = ob.__new__(cls, *args, **kwargs)
return cls._instance
class MyClass(Borg):
def __init__(self):
self.a = 1
if __name__ == '__main__':
a1 = MyClass()
a2 = MyClass()
a1.a = 10
print(a1.a)
print(a2.a)
print(a1.__dict__)
#方法二:共享模式
class Borg2(object):
_state = {}
def __new__(cls, *args, **kwargs):
ob = super(Borg2, cls).__new__(cls, *args, **kwargs)
ob.__dict__ = cls._state
return ob
class MyClass(Borg2):
def __init__(self):
self.a = 1
if __name__ == '__main__':
a1 = MyClass()
a2 = MyClass()
a1.a = 10
print(a1.a)
print(a2.a)
print(a1.__dict__)
class FError(Exception):
pass
try:
raise FError("自定义异常")
except FError as e:
print(e)
进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操做系统结构的基础。或者说进程是具备必定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。 线程则是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。sql
(1)一个线程只能属于一个进程,而一个进程能够有多个线程,但至少有一个线程。数据库
(2)资源分配给进程,同一进程的全部线程共享该进程的全部资源。安全
(3)CPU分给线程,即真正在CPU上运行的是线程。服务器
GIL的全称是Global Interpreter Lock(全局解释器锁),来源是python设计之初的考虑,为了数据安全所作的决定。每一个CPU在同一时间只能执行一个线程(在单核CPU下的多线程其实都只是并发,不是并行,并发和并行从宏观上来说都是同时处理多路请求的概念。但并发和并行又有区别,并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。) 在Python多线程下,每一个线程的执行方式: 1.获取GIL 2.执行代码直到sleep或者是python虚拟机将其挂起。 3.释放GIL 可见,某个线程想要执行,必须先拿到GIL,咱们能够把GIL看做是“通行证”,而且在一个python进程中,GIL只有一个。拿不到通行证的线程,就不容许进入CPU执行。网络
#1.使用字符串自己的翻转
def string_reverse1(text='abcdef'):
return text[::-1]
#2.把字符串变为列表,用列表的reverse函数
def string_reverse2(text='abcdef'):
new_text=list(text)
new_text.reverse()
return ''.join(new_text)
print string_reverse2('abcdef')
fedcba
#3.新建一个列表,从后往前取
def string_reverse3(text='abcdef'):
new_text=[]
for i in range(1,len(text)+1):
new_text.append(text[-i])
return ''.join(new_text)
print string_reverse3('abcdef')
fedcba
#4.利用双向列表deque中的extendleft函数
from collections import deque
def string_reverse4(text='abcdef'):
d = deque()
d.extendleft(text)
return ''.join(d)
print string_reverse4('abcdef')
fedcba
#5.递归
def string_reverse5(text='abcdef'):
if len(text)<=1:
return text
else:
return string_reverse5(text[1:]+text[0])
F(1) = 1;
F(2)= 2;
F(n) = F(n-1)+F(n-2); n>2
进程是一个程序执行的实体. 进程包含的资源有:代码, 公有数据, 进程控制块(pid, 软硬件资源) 进程的提点是占用内存空间较大, 上下文切换速度慢多线程
线程是一个程序的执行路径(一个函数) 线程包含的资源有:函数代码, 私有数据, 线程控制块, 线程特色是占用内存空间小, 上下文切换速度快并发
1.地址空间和其余资源(如打开文件):进程间相互独立,同一进程的各线程间共享。某进程内的线程在其余进程内不可见。 2.通讯:进程间通讯IPC(管道,信号量,共享内存,消息队列),线程间能够直接独写进程数据段(如全局变量)来进程通讯——须要进程同步和互斥手段的辅助,以保证数据的一致性。 3.调度和切换:线程上下文切换比进程上下文切换快得多。 4.在多线程OS中,进程不是一个可执行的实体。app
1.python提供了多种进程通讯方式, 主要Queue和Pipe这两种方式, Queue用于多个进程间实现通讯, Pipe是两个进程的通讯 1.1 Queue有两个方法: Put方法:以插入数据到队列中,他还有两个可选参数:blocked和timeout。详情自行百度 Get方法:从队列读取而且删除一个元素。一样,他还有两个可选参数:blocked和timeout。详情自行百度 1.2 Pipe通讯机制,
Pipe经常使用于两个进程,两个进程分别位于管道的两端
Pipe方法返回(conn1,conn2)表明一个管道的两个端,Pipe方法有duplex参数,默认为True,即全双工模式,若为FALSE,conn1只负责接收信息,conn2负责发送,
send和recv方法分别为发送和接收信息
TCP与UDP区别总结: 一、TCP面向链接(如打电话要先拨号创建链接);UDP是无链接的,即发送数据以前不须要创建链接;
TCP提供可靠的服务, 也就是说, 经过TCP链接传送的数据, 无差错, 不丢失, 不重复, 且按序到达; UDP尽最大努力交付, 既不保证可靠交付;
TCP面向字节流, 其实是TCP把数据堪称一连串无结构的字节流;UDP是面向报文的;UDP没有拥塞控制, 所以网络出现拥塞不会使源主机的发送速率下降(对实时应用颇有用, 如IP电话, 实时视频会议等);
每一条TCP链接只能是点到点的;UDP支持一对一, 一对多, 多对一和多对多的交互通讯;
TCP首部开销20字节;UDP的首部开销小, 只有8个字节;
TCP的逻辑通讯信道是全双工的可靠信道, UDP则是不可靠信道