09 2020 档案
摘要:一、为什么要使用线程池 多线程的情况下确实可以最大限度发挥多核处理器的计算能力,提高系统的吞吐量和性能。 但是如果随意使用多线程,对系统的性能反而有不利影响。 比如下面的情况: 创建线程是需要时间的,假设线程创建所需时间为T1,线程执行任务时间为T2,线程销毁时间为T3,而往往T1+T3>T2。所以
阅读全文
摘要:一、死锁 在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源,就会造成死锁。 就好像在现实社会中,男女双方在闹别扭之后,都在等待对方先道歉。 如果双方都这样固执地等待对方先开口,弄不好,就 over 了。 尽管死锁很少发生,但一旦发生就会造成应用的停止响应。 下面看一个
阅读全文
摘要:一、同步概念 同步就是协同步调,按预定的先后次序进行运行。如:你说完,我再说。 "同"字从字面上容易理解为一起动作。 其实不是,在这里,"同"字应是指协同、协助、互相配合。 线程同步,可理解为线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,于是停下来,示意B运行;B执行,再将结果给A;A再
阅读全文
摘要:在之前,我们讲过了,Python 中多个线程之间是可以共享全局变量的数据的。 但是,多线程共享全局变量是会出问题的。 假设两个线程 t1 和 t2 都要对全局变量 g_num (默认是0)进行加1运算,t1 和 t2 都各对 g_num 加10次,g_num 的最终的结果应该为20。 但是由于多线程
阅读全文
摘要:一、多线程共享全局变量 首先我们来回忆下在函数中修改全局变量的情况。 在一个函数中,对全局变量进行修改的时候,到底是否需要使用 global 进行说明,要看是否对全局变量的执行指向进行了修改。 如果修改了执行指向,即让全局变量指向了一个新的地方,那么必须使用 global。 如果仅仅是修改了指向的空
阅读全文
摘要:一、主线程会等待所有的子线程结束后才结束 首先我看下最普通情况下,主线程和子线程的情况。 import threading from time import sleep, ctime def sing(): for i in range(3): print("正在唱歌...%d" % i) slee
阅读全文
摘要:当程序中包含多个线程时,CPU 不是一直被特定的线程霸占,而是轮流执行各个线程。 那么,CPU 在轮换执行线程的过程中,即从创建到消亡的整个过程,可能会历经 5 种状态,分别是新建、就绪、运行、阻塞和死亡。 线程的新建状态 无论是通过 Thread 类直接实例化对象创建线程,还是通过继承自 Thre
阅读全文
摘要:我们怎么让一个 Python 程序里边实现多任务呢? 实现多任务可以有多种方式,这里我们先了解使用线程的方式实现多任务。 线程是实现多任务的一种的手段。 其实用的是 threading 模块,threading 模块里有一个类叫 Thread。 Python 的 thread 模块是比较底层的模块,
阅读全文
摘要:现实生活中,有很多场景中的事情是同时进行的,比如开车的时候,手和脚共同来驾驶汽车,再比如唱歌跳舞也是同时进行的。 以上这些可以理解为多任务。那在程序中怎么能做到多任务,它有什么好处? 接下来我们来看看没有多任务的程序是什么效果。 import time def sing(): for i in ra
阅读全文
摘要:什么是下载? 首先客户端会问服务器,有没有一个xxx的文件啊?服务器开始寻找,找到后对客户端说有,然后客户端在本地新建一个文件,客户端从服务器收到一点数据,就写进这个文件中,再收到一点数据,再写入这个文件中,只要把所有的接收到的数据都写入到这个文件中,就完成了下载的操作。 所以下载需要2个部分。服务
阅读全文
摘要:TCP协议,传输控制协议(英语:Transmission Control Protocol,缩写为 TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。 TCP通信需要经过创建连接、数据传送、终止连接三个步骤。 TCP通信模型中,在通信开始之前,一定要先建立
阅读全文
摘要:Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。 UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。 udp网络程序模型图。 接下来,我们用 python 代码实现udp数据的发送和接收。
阅读全文
摘要:网络编程就是编写程序使两台联网的计算机相互交换数据。 那么,这两台计算机之间用什么传输数据呢?首先你肯定先需要物理连接嘛。 在此基础上,只需要考虑如何编写数据传输程序。看似很麻烦,但实际上这点不用愁,因为操作系统已经提供了 socket。即使对网络数据传输的原理不太熟悉,我们也能通过 socket
阅读全文
摘要:当程序运行时,变量是保存数据的好方法,但变量、序列以及对象中存储的数据是暂时的,程序结束后就会丢失,如果希望程序结束后数据仍然保持,就需要将数据保存到文件中。 Python 提供了内置的文件对象,以及对文件、目录进行操作的内置模块,通过这些技术可以很方便地将数据保存到文件(如文本文件等)中。 一、文
阅读全文
摘要:实际开发中,一个大型的项目往往需要使用成百上千的 Python 模块,如果将这些模块都堆放在一起,势必不好管理。 而且,使用模块可以有效避免变量名或函数名重名引发的冲突,但是如果模块名重复怎么办呢? 因此,Python提出了包(Package)的概念。 一、包的概念和基本使用 什么是包呢?简单理解,
阅读全文
摘要:Python 提供了强大的模块支持,主要体现在,不仅 Python 标准库中包含了大量的模块(称为标准模块),还有大量的第三方模块,开发者自己也可以开发自定义模块。 通过这些强大的模块可以极大地提高开发者的开发效率。 一、模块的概念 模块,英文为 Modules,是 Python 程序架构的一个核心
阅读全文
摘要:开发人员在编写程序时,难免会遇到错误,有的是编写人员疏忽造成的语法错误,有的是程序内部隐含逻辑问题造成的数据错误,还有的是程序运行时与系统的规则冲突造成的系统错误,等等。 总的来说,编写程序时遇到的错误可大致分为 2 类,分别为语法错误和运行时错误。 语法错误,也就是解析代码时出现的错误。当代码不符
阅读全文
摘要:在大多数语言的程序中,一个类,每有一个属性,就会对应 setter 和 getter,基本都是标配。 示例: class Money(object): def __init__(self): self.__money = 0 def getMoney(self): return self.__mon
阅读全文

浙公网安备 33010602011771号