1.协程 是用户态的轻量级线程
#-----优点------------
#无需上下文切换
#无需原子操作锁定集同步的开销
#方便切换控制流,简化编程模型
#高并发,高扩展性,低成本,一个cpu支持上万协程 实现高并发处理
#------缺点----------
#无法多核 ,(完善,进程+多协程)
#进行io阻塞,阻塞的是整个程序
#***基于yield实现协程
import time
import queue
def consumer(name):
print('yanga11ang',name)
while True:
new_baozi=yield
print('%s, is eating baozi %s'% (name,new_baozi))
def producer():
r=con.__next__()
r=con2.__next__()
n=0
while n<5:
n+=1
con.send(n)
con2.send(n)
print('%s'% n)
if __name__=='__main__':
con=consumer('c1')
con2=consumer('c2')
p=producer() #函数返回值
#***基于greenlet实现协程 需要安装库
#sudo pip install greenlet
from greenlet import greenlet
def test1():
print(12)
gr2.switch()
print(34)
gr2.switch()
def test2():
print(56)
gr1.swatch()
print(78)
gr1=greenlet(test1)
gr1=grennlet(test2)
gr1.swatch() #跳转到gr1开始执行被保存的swatch
#***基于gevent实现协程 需要安装库
#sudo pip install gevent
import gevent
def foo():
print('runing in foo')
gevent.sleep(1) #阻塞后直接运行其他的协程
print('swith back to foo')
def bar():
print('runing in bar')
gevent.sleep(2)
print('swith back to bar')
gevent.joinall([
gevent.spawn(foo), #创建运行协程
gevent.spawn(bar),
])
#---例子2----爬网页
from gevent import monkey
monkey.patch_all() #监听i/o阻塞,在win中更好的切换协程
import gevent
from urllib.request improt urlopen
def f(url):
print('GET:%s'% url)
resp=urlopen(url)
data=resp.read()
with open('yanga11ang.txt',w) as f:
f.write(data)
print('%d bytes received from %s'% (len(data),url))
gevent.joinall([
gevent.spawn(f,'http://www.python.org'),
gevent.spawn(f,'http://www.baidu.com')
])
2.如果认知 美国
老友记
琳达看美国
3.网络基础
#操作系统基础
#internet
# 物理连线 :网线
# 统一通信标准:互联网协议
#osi七层协议
# 物理层: 网线 电缆 双绞线 无线电波.高电压1低0 联网基础
# 数据链路层:电信号进行分组,8个二进制是一组
# 以太网协议 :
# 一组电信号构成一个数据包,叫做帧
# 每一数据帧分成:报头head和数据data两部分
# head包括:发送者的地址6字节,接受者的地址6字节,数据类型6字节
# data包括:最短46字节最长1500字节,数据包的具体内容
# head+data=最短64 最长1518.超过分片
# mac地址:
# 每个intert设备都有网卡 每块网卡都有世界唯一的mac地址 48二进制(12为16进制表示,前六位厂商编号,后六位流水线编号)
# 以太网用的地址是mac地址
# 广播:
# 在自己的屋子(局域网)里广播,计算机有嘴和耳朵,不是自己的不要
# arp协议:获取目标的mac地址 (知道自己的地址,和对方的地址,不知道对方的mac)
# 先算出网段,
# 同一子网,数据包地址是目标mac目标机ip
# 不同子网,网关的mac,目标机ip
# 同一子网
# 发送端主机|发送端mac|FF:FF:FF:FF:FF:FF(表示所有的mac都可以接收)|源ip|目标ip|数据|
# 发现ip地址是自己的,重发回去,对方即可知道自己的mac地址
# 不是自己同一个子网
# 找人帮自己:网关,跨网络发包
# 先用arp协议得到网关的mac地址
# 然后 自己mac 网关mac 自己ip 目标ip(不是网关ip)
# 最后 通过路由会找到,目标ip的网关
# 目标ip的网关会发送给对方ip机,对方得到自己的mac,发过来后,得到对方的mac
# 网络层: 跨子网通信
# 所有上层的包都要封装以太网头
# ip协议
# 主要是ipv4 他规定网络地址有32个2进制位表示
# 范围 0.0.0.0-255.255.255.255
# 一个ip地址通常写成四段十进制
# ip地址分成两部分
# 网络部分: 在那个房间(子网)里面
# 主机部分: 是房间里的哪台电脑
# 子网掩码:区分网络部分和主机部分
# 网络部分用数字1代表,主机部分全部用数字0代表
# 算出网络部分是ip地址与子网掩码,按位与
# ip数据包:网络层通信方式
# ip数据包分为两部分,ip包定义的单独栏位,直接放入以太包的打他部分
# head:长度为 20-60字节 源ip+目标ip+掩码
# data:长度为65.515字节
# 以太网数据包,的数据部分只有1500字节,ip数据包,超过了1500只能分多个以太数据包发送
# 以太网头|ip头|ip数据
#
def a():
def b():
def c():
def d():
def e():