07 2020 档案
摘要:一、前言 虽说用 Python编写简单的网络程序很方便,但复杂一点的网络程序还是用现成的框架比较好。这样就可以专心事务逻辑,而不是套接字的各种细节。SocketServer模块简化了编写网络服务程序的任务。同时 SocketServer模块也是 Python标准库中很多服务器框架的基础。 socke
阅读全文
摘要:一、多路复用IO(IO multiplexing) IO multiplexing这个词可能有点陌生,但是如果我说 select/epoll,大概就都能明白了。 有些地方也称这种IO方式为事件驱动IO(event driven IO)。 我们都知道,select/epoll的好处就在于单个 proc
阅读全文
摘要:一、阻塞IO(blocking IO) 在 linux中,默认情况下所有的 socket都是blocking,一个典型的读操作流程大概是这样: 当用户进程调用了 recvfrom这个系统调用,kernel就开始了IO的第一个阶段:准备数据。 对于 network io来说,很多时候数据在一开始还没有
阅读全文
摘要:一、IO模型介绍 为了更好地了解 IO模型,我们回顾下:同步,异步,阻塞,非阻塞。 1,同步: # 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不会返回。 # 按照这个定义,其实绝大多数函数都是同步调用。但是一般而言,我们在说同步、异步的时候, # 特指那些需要其他部件协作或者需
阅读全文
摘要:一、greenlet模块 如果我们在单个线程内有20个任务,要想实现在多个任务之间切换,使用yield生成器的方式过于麻烦(需要先得到初始化一次的生成器,然后再调用send。。。非常麻烦),而使用greenlet模块可以非常简单地实现这20个任务直接的切换。 from greenlet import
阅读全文
摘要:一、前言 本节的主题是基于单线程来实现并发,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发,为此我们需要先回顾下并发的本质:切换+保存状态。 协程指的就是单线程下实现并发 cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操作系统强制控制),一种情况是该任务发生了阻塞
阅读全文
摘要:一、同步调用 提交任务有两种方式:同步调用,异步调用。 同步调用:提交完任务后,就在原地等待任务执行完毕,拿到结果再执行下一行代码,导致程序是串行执行。 例子:今年你们公司开年会,举办了一个吃汉堡大赛,然后把计算下大家一共吃了多少个,谁的最多,谁发的年终奖就最多。 # 1,同步调用:提交完任务后,就
阅读全文
摘要:一、进程池与线程池 在刚开始学多进程或多线程时,我们迫不及待地基于多进程或多线程实现并发的套接字通信。 然而这种实现方式的致命缺陷是:服务的开启的进程数或线程数都会随着并发的客户端数目地增多而增多,这会对服务端主机带来巨大的压力,甚至于不堪重负而瘫痪。 于是我们必须对服务端开启的进程数或线程数加以控
阅读全文
摘要:一、线程queue 1,定义: queue队列 :使用 import queue,用法与进程 Queue一样。 queue is especially useful in threaded programming when information must be exchanged safely b
阅读全文
摘要:一、信号量(Semaphore) 信号量也是一把锁,可以指定信号量为5,对比互斥锁同一时间只能有一个任务抢到锁去执行,信号量同一时间可以有5个任务拿到锁去执行,如果说互斥锁是合租房屋的人去抢一个厕所,那么信号量就相当于一群路人争抢公共厕所,公共厕所有多个坑位,这意味着同一时间可以有多个人上公共厕所,
阅读全文
摘要:一、引言 定义: ''' 定义: In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytecodes at
阅读全文
摘要:一、守护线程 无论是进程还是线程,都遵循:守护xxx会等待主xxx运行完毕后被销毁。 需要强调的是:运行完毕并非终止运行。 # 1,对主进程来说,运行完毕指的是主进程代码运行完毕。 # 2,对主线程来说,运行完毕指的是主线程所在的进程内所有非守护线程统统运行完毕,主线程才算运行完毕。 详细解释: #
阅读全文
摘要:一、Thread 对象的其他属性或方法 1,介绍: Thread实例对象的方法 # isAlive(): 返回线程是否活动的。 # getName(): 返回线程名。 # setName(): 设置线程名。 threading模块提供的一些方法: # threading.currentThread(
阅读全文
摘要:一、谁的开启速度快? 1,在主进程下开启子进程 import time from multiprocessing import Process def say_hi(name): print('%s say hi!' % name) time.sleep(2) print('%s say hello
阅读全文
摘要:一、threading 模块介绍 multiprocess 模块完全模仿了 threading 模块的接口,二者在使用层面上,有很大的相似性,因而不再详细介绍。 二、开启线程的两种方式 1,方式一: from threading import Thread import time def say_h
阅读全文
摘要:一、什么是线程 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程。 线程顾名思义,就是一条流水线工作的过程(流水线的工作需要电源,电源就相当于cpu),而一条流水线必须属于一个车间,一个车间的工作过程是一个进程,车间负责把资源整合到一起,是一个资源单位,而一个车间内至少有一条流水线
阅读全文
摘要:一、队列介绍 进程彼此之间互相隔离,要实现进程间通信(IPC),multiprocessing 模块支持两种形式:队列和管道,这两种方式都是使用消息传递的。 1,创建队列的类(底层就是以管道和锁定的方式实现): # Queue([maxsize]):创建共享的进程队列,Queue是多进程安全的队列,
阅读全文
摘要:一、守护进程 1,主进程创建子进程,然后将该进程设置成守护自己的进程,守护进程就好比皇帝身边的老太监,皇帝已死老太监就跟着殉葬了。 关于守护进程需要强调两点: 其一:守护进程会在主进程代码执行结束后就终止。 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemon
阅读全文
摘要:一、multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu\_count\(\)查看),在python中大部分情况需要使用多进程。Python提供了multiprocessing。 multiprocessing模块用来开启子
阅读全文
摘要:一、什么是进程 1,进程: 正在进行的一个过程或者说一个任务,而负责执行任务的则是 cpu。 2,举例(单核 + 多道,实现多个进程的并发执行): 1)子系在一段时间内有很多任务要做:学 Python,听音乐,写笔记,PUBG上分。 2)但是子系同一时刻只能做一个任务(cpu 同一时间只能干一个活)
阅读全文
摘要:一、引言 顾名思义,进程即正在执行的一个过程,进程是对正在运行程序的一个抽象。 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一。操作系统的其他所有内容都是围绕进程的概念展开的。 所以想要真正了解进程,必须实现了解操作系统。 二、为什么要有操作系统
阅读全文
摘要:一、引言 学完了面向对象的基础知识后,可还是不知该如何下手,凡是都得有个章法。 此刻有经验的人可能会想到瀑布模型、螺旋模型、迭代开发、敏捷、RUP等一堆软件工程相关的软件开发流程,但对于大部分人来说这些流程仅仅只是项目管理上的流程。 本节我们就来了解下,作为一名程序员基于面向对象开发程序的开发流程:
阅读全文
摘要:一、容易犯的错误 1,面向对象的程序设计看起来高大上,所以在编程时就应该保证通篇 class,这样写出的程序一定是好的程序(面向对象只适合那些可扩展性要求比较高的场景) 2,很多人喜欢说面向对象三大特性(这是从哪传出来的,封装,多态,继承?漏洞太多太多,好吧暂且称为三大特性),那么我在基于面向对象编
阅读全文
摘要:一、引言 1,元类属于python面向对象编程的深层魔法,接下来,我们就一起来深度了解python元类的来龙去脉。 2,补充:exec 的用法: # 储备知识 exec # 参数1:字符串形式的命令 # 参数2:全局作用域(字典形式),如果不指定,默认就使用 globals() # 参数3:局部作用
阅读全文
摘要:一、isinstance(obj,cls)和 issubclass(sub,super) 1,isinstance(obj,cls) 检查 obj 是否是类 cls 的对象 class Foo(object): pass obj = Foo() print(isinstance(obj, Foo))
阅读全文
摘要:一、类中定义的函数分成两大类 1,绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入): 1)绑定到类的方法:用 classmethod 装饰器装饰的方法,为类量身定制。 类.boud_method(),自动将类当作第一个参数传入(其实对象也可调用,但仍将类当作第一个参数传入) 2)绑定到
阅读全文
摘要:一、引言 从封装本身的意思去理解,封装就好像是拿来一个麻袋,把小猫,小狗,小猪一起装进麻袋,然后把麻袋封上口子。照这种逻辑看,封装 = ‘隐藏’,这种理解是相当片面的。 二、先看如何隐藏 在 python 中用双下划线开头的方式将属性隐藏起来(设置成私有的) # 其实这仅仅是一种变形操作且仅仅只在类
阅读全文
摘要:一、多态 多态指的是一类事物有多种形态 动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.ABCMeta): # 同一类事物:动物 @abc.abstractmethod def talk(self): # 抽象方法不用实现 pass class
阅读全文
摘要:一、初识继承 1,什么是继承? 继承是一种创建新类的方式,新建的类可以继承一个或多个父类(python 支持多继承),父类又可称为基类或超类,新建的类称为派生类或子类。 子类会“遗传”父类的属性,从而解决代码重用问题(比如练习中 Garen 与 Riven 类有很多冗余的代码) python 中类的
阅读全文
摘要:一、编程范式 1,编程是程序员用特定的 语法+数据结构+算法 组成的代码来告诉计算机如何执行任务的过程 。 2,一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任务有很多种不同的方式, 对这些不同的编程方式的特点进行归纳总结得出来的编程方式类别,即为编程范式
阅读全文
摘要:一、操作系统基础 操作系统:(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。 注意:计算机(硬件)--> os --> 应用软件 二、网络通信原理 2.1互联网的本质就
阅读全文
浙公网安备 33010602011771号