摘要: 本次网络编程的学习是根据老男孩视频的学习而所作的笔记,具体的参考博客:www.cnblogs.com/ly-c 没有想不到,只有不敢做 大胆闯吧少年! 阅读全文
posted @ 2019-10-22 12:39 LBC不认输 阅读(97) 评论(0) 推荐(0)
摘要: #方法:sk.setblocking(False) #服务器端: import socket sk=socket.socket() sk.setblocking(False) sk.bind(('127.0.0.1',8080)) sk.listen() #定义空列表用于存放各个conn Conn_List = [] #定义删除列表用于删除Conn_List中断开连接的客户端conn Conn... 阅读全文
posted @ 2019-10-22 12:38 LBC不认输 阅读(569) 评论(0) 推荐(0)
摘要: #select 和 poll 和epoll的区别 ''' select和poll有一个共同的机制,都是采用轮训的方式去询问内核,有没有数据准备好了 select有一个最大监听事件的限制,32位机限制1024,,6位机限制2048 poll没有,理论上poll可以开启无限大,1G内存大概够你开10W个事件去监听 epoll是最好... 阅读全文
posted @ 2019-10-22 12:36 LBC不认输 阅读(372) 评论(0) 推荐(0)
摘要: 为什么要有协程? 因为想要在单线程内实现并发的效果。 因为CPthon有GIL锁,限制了在同一个时间点,只能执行一个线程 所以想要在执行一个线程的期间,充分的利用CPU的性能 所以才有了想在单线程内实现并发的效果。 并发:切换+保存状态 cpu是为什么要切换? 1 因... 阅读全文
posted @ 2019-10-22 12:36 LBC不认输 阅读(114) 评论(0) 推荐(0)
摘要: 模块:ThreadPoolExecutor,ProcessPoolExecutor 导入方法: from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor 原理: concurrent.futures是异步调用的机制 模块区分: from multiprocessing import Pool.apply/apply_ 阅读全文
posted @ 2019-10-22 12:35 LBC不认输 阅读(148) 评论(0) 推荐(0)
摘要: import time def func(): print(123) sum = 0 print(6666) yield sum print(7777) yield sum print(8888) yield sum def fff(): g = func() print('这是在ffff函数中') pri... 阅读全文
posted @ 2019-10-22 12:35 LBC不认输 阅读(211) 评论(0) 推荐(0)
摘要: 线程被称作轻量级的进程。 GIL:全局解释锁(只有Cpython解释器才有) 线程会被强迫放弃CPU的因素 (线程会受时间片影响)(GIL会限制每个线程的执行时间,一般是5毫秒)(或者限制线程执行固定数量的字节码) 对于线程来说,因为有了GIL,所以没有真正的并行 计算机的执行单位以线程为单位。计算机的最小可执行是线程。 进程是资源分配的基本单位。线程是可执行的基本单位,是可被调度的基本单位。 线 阅读全文
posted @ 2019-10-22 12:34 LBC不认输 阅读(172) 评论(0) 推荐(0)
摘要: from multiprocessing import Manager,Value m = Manager() num = m.dict({键 : 值}) num = m.list([1,2,3]) 阅读全文
posted @ 2019-10-22 12:32 LBC不认输 阅读(166) 评论(0) 推荐(0)
摘要: #模块:Pool #导入方法:from multiprocessing import Pool #原理: 进程池:一个池子,里边有固定数量的进程。这些进程一直处于待命状态,一旦有任务来,马上就有进程去处理。 因为在实际业务中,任务量是有多有少的,如果任务量特别的多,不可能要开对应那么多的进程数 开启那么多进程首先就需要消耗大量的时间让操作系统来为你管理它。其次还需要消耗大量时间让 cpu帮你调度它 阅读全文
posted @ 2019-10-22 12:32 LBC不认输 阅读(171) 评论(0) 推荐(0)
摘要: from multiprocessing import Queue# 是用于多进程的队列,就是专门用来做进程间通信(IPC)。import queue# 是用于同一进程内的队列,不能做多进程之间的通信 # q = queue.Queue()# # 先进先出# q.put(1)# q.put(2)# 阅读全文
posted @ 2019-10-22 12:31 LBC不认输 阅读(374) 评论(0) 推荐(0)
摘要: #模块:Event #导入方法:from multiprocessing import Process,Event #模块方法: e=Event() e.is_set() #当is_set()的值为True时,e.wait()是非阻塞状态 #当is_set()的值为False时,e.wait()是阻塞状态 e.wait... 阅读全文
posted @ 2019-10-22 12:29 LBC不认输 阅读(118) 评论(0) 推荐(0)
摘要: #模块:Lock #导入方法:from multiprocessing import Process,Lock #模块方法: l=Lock() l.acquire() #对所访问的资源加锁 l.release() #释放锁 #使用方法:一般在需要访问的资源的那部分代码加锁释放锁,但在初学阶段可以先包含整段程序 ###########模拟抢票程序 from ... 阅读全文
posted @ 2019-10-22 12:28 LBC不认输 阅读(327) 评论(0) 推荐(0)
摘要: #注意!多进程之间无法共享内存,如下面代码中的n,如果在每一个子进程中调用n,则会报错! from multiprocessing import Process import time import random def func(i): print(i) if __name__=='__main__': l=[] n=100 addr=[... 阅读全文
posted @ 2019-10-22 12:27 LBC不认输 阅读(242) 评论(0) 推荐(0)
摘要: 进程方法 1.p.start() #启动进程 2.p.run() #进程启动时运行的方法,是它去调用target指定的函数,自定义类中一定要实现该方法 3.p.terminate() #强制终止进程p,不会进行任何清理操作,如果p创建了子进程,该子进程就成了僵尸进程。如果p还保存了一个锁那么也将不会被释放,进而导致死锁 4.p.... 阅读全文
posted @ 2019-10-22 12:26 LBC不认输 阅读(300) 评论(0) 推荐(0)
摘要: 多进程模块:Process #from multiprocessing import Process #os.getpid()获取的是当前进程自己的pid #os.getppid()获取的是当前进程的父进程的pid 实例化一个进程对象 #p = Process(target=func,args=(1,)) target: 是子进程要执行的任务 args:是父进程给子进程传递的参数 进程的方法: p 阅读全文
posted @ 2019-10-22 12:25 LBC不认输 阅读(164) 评论(0) 推荐(0)
摘要: from multiprocessing import Process import time def func(): for i in range(500): time.sleep(0.01) print('儿子在这里') if __name__ == '__main__': p = Process(target=func) p.start() p.join()# 是让主进程等待子进程执行完。 阅读全文
posted @ 2019-10-22 12:23 LBC不认输 阅读(245) 评论(0) 推荐(0)
摘要: 并行 并发 并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。 普通解释: 并发:交替做不同事情的能力 并行:同时做不同事情的能力 专业术语: 并发:不同的代码块交替执行 并行:不同的代码块同时执行 同步:一个任务的完成需要依赖另外一个任务时,只有等待被依赖的任务完成后,依赖的任务才能算完成 这是一种可靠的任务序列,要么成功都成功,失败都失败,两个任务的状态可以保 阅读全文
posted @ 2019-10-22 12:23 LBC不认输 阅读(204) 评论(0) 推荐(0)
摘要: 操作系统的作用: 1,封装所有硬件接口,让各种用户使用电脑更加轻松 2,是对计算机内所有资源进行合理的调度和分配 进程: 是指正在执行的程序。 是程序执行过程中的一次 指令,数据集等的集合。 也可以叫做程序的一次执行过程。 进程是一个动态的概念。 进程由三大部分组成:代码段,数据段,PCB:进程管理控制 进程的三大基本状态: 就绪状态:已经获得运行需要的所有资源,除了CPU 执行状态:已经获得了所 阅读全文
posted @ 2019-10-22 12:22 LBC不认输 阅读(248) 评论(0) 推荐(0)
摘要: #server层 import socketserver import json import hashlib def zhuce(): pass class MySocket(socketserver.BaseRequestHandler): def handle(self): sor = b'wusir'# while 1: ... 阅读全文
posted @ 2019-10-22 12:21 LBC不认输 阅读(150) 评论(0) 推荐(0)
摘要: 模块:socketserver模块(内置模块)(并发原理) socketserver这个模块主要是为了解决:TCP协议中,服务器不能同时连接多个客户端的问题 而继承的这个类中的self.request等价于原来socket中的conn(conn,addr=sk.accept()) #server层(固定形式) import socketserver class... 阅读全文
posted @ 2019-10-22 12:21 LBC不认输 阅读(97) 评论(0) 推荐(0)
摘要: 1.import os os.urandom(num) 随机出一个num位的随机bytes 2.import hamc md5_obj = hmac.new(盐,随机字符串) r = md5_obj.digest() 拿到一个bytes的结果,也就是密文 补充:hashlib的加密 # md5_obj = hashlib.md5(sor) # md5_obj.update(r_str.encode 阅读全文
posted @ 2019-10-22 12:20 LBC不认输 阅读(342) 评论(0) 推荐(0)
摘要: 1.sendall() #将数据一次性发送,即不进行拆包(区别于send()) 2.setblocking(False) #设置accept和recv两个方法的阻塞与非阻塞状态 (非阻塞IO模型解决阻塞IO模型) #参数为False 代表设置为非阻塞状态 #参数为True(或者不写)默认为阻塞状态 3.settimeout() #设置等待超时时间 ... 阅读全文
posted @ 2019-10-22 12:17 LBC不认输 阅读(89) 评论(0) 推荐(0)
摘要: 本知识需要注意! 1.客户端输入路径后,到达服务器端需要先加上"/"否则可能会出错 2.找到该路径下的目录内容调用os的listdir()方法,返回的是一个列表的形式,必须将其格式化为字符串 3.目录内容格式化为字符串,需要用某个字符去作为分隔符,再用分隔符.join()的方法将列表转为指定分隔符分隔的字符串 4.到达客户端时,输出split()按某个特定分隔符分... 阅读全文
posted @ 2019-10-22 12:17 LBC不认输 阅读(1156) 评论(0) 推荐(0)
摘要: #server层 # 切换目录 import socket import os sk = socket.socket() sk.bind(('127.0.0.1',8080)) sk.listen() conn,addr = sk.accept() def send_data(conn,path): '''你给我一个目录,我把目录发给client''' lis_dir = os.listdir(p 阅读全文
posted @ 2019-10-22 12:15 LBC不认输 阅读(216) 评论(0) 推荐(0)
摘要: 解决粘包 模块struct struct.pack(type,num) type:是num的类型 num :是一个数字 r = struct.pack 把一个数字打包成一个四字节的bytes struct.unpack(type,r) 功能:解包,把r解成原数字,结果是一个元组,原数字在元组的... 阅读全文
posted @ 2019-10-22 12:15 LBC不认输 阅读(1985) 评论(0) 推荐(0)
摘要: 粘包问题: 发送端发送数据,接收端不知道应该如何接收而造成的一种数据混乱的现象 只有tcp协议才会发送粘包(数据链路层),udp(传输层)不会发生 udp不会发生粘包,udp协议本层对一次收发数据大小的限制是: 65535 - ip包头(20) - udp包头(8) = 65507 针对 使用udp 阅读全文
posted @ 2019-10-22 12:13 LBC不认输 阅读(254) 评论(0) 推荐(0)
摘要: 在python中调用操作系统的命令 import os import subprocess # r = os.popen('ipconfig') r = subprocess.Popen('ls',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)、 # subprocess.Popen(cmd,shell=True,subproce 阅读全文
posted @ 2019-10-22 12:09 LBC不认输 阅读(367) 评论(0) 推荐(0)
摘要: #自定义类 import socket class Mysocket(socket.socket): #继承自socket文件中的socket类 def __init__(self,encoding='utf-8'): self.encoding='utf-8' super(Mysocket, self).__init__(type=socket.SOCK_DGRAM) #执行父类socketz中 阅读全文
posted @ 2019-10-22 12:08 LBC不认输 阅读(218) 评论(0) 推荐(0)
摘要: #-------server层 import socket import json sk=socket.socket() sk.bind(('10.70.2.143',8080)) sk.listen() conn,addr=sk.accept() #通信 str_dic=conn.recv(9090).decode('utf-8') #将字符串形式反序列化为字典 dic=json.loads(... 阅读全文
posted @ 2019-10-22 12:08 LBC不认输 阅读(425) 评论(0) 推荐(0)
摘要: #TCP协议实现(发送消息的顺序无要求)(以conn为对象发送和接收消息)(字节流) #-------serve层 import socket import time sk=socket.socket() sk.bind(('10.70.2.143',8080)) #1.服务器地址 2.服务器端口,0~65535范围,但是0~1023最好不要用 sk.... 阅读全文
posted @ 2019-10-22 12:07 LBC不认输 阅读(502) 评论(0) 推荐(0)
摘要: www.cnblogs.com/ly-c 阅读全文
posted @ 2019-10-22 12:04 LBC不认输 阅读(82) 评论(0) 推荐(0)
摘要: 合包机制 拆包机制 阅读全文
posted @ 2019-10-22 12:03 LBC不认输 阅读(148) 评论(0) 推荐(0)
摘要: 网络基础 (1) 架构 a. C / S架构 : client客户端 和 server服务器端 优势 : 能充分发挥PC机的性能 b. B / S架构 : browser浏览器 和 server服务器 隶属于C/S架构 B / S架构 统一了应用的接口. (2) 通信的事: a. 同一台电脑上两个py程序通信 : 打开一个文件 b. 两个电脑如何通信 : 连一个网线 c. 多个电脑通信 : mac 阅读全文
posted @ 2019-10-22 12:01 LBC不认输 阅读(153) 评论(0) 推荐(0)