随笔分类 - Python
摘要:财务需要一个扫描枪扫描发票文件,并将主要信息录入Excel 的功能。 文件中sheet表的列名称,依次为:发票编号、发票编码、日期、金额、工号、扫描日期。 扫描的时候,Excel 文件需要关闭,否则会报错。 import openpyxl import datetime def write_line
阅读全文
摘要:协程,又称微线程,纤程。英文名 Coroutine。 协程是 Python 中另外一种实现多任务的方式,只不过比线程更小,占用更小执行单元(理解为需要的资源)。 为啥说它是一个执行单元,因为它自带 CPU 上下文。这样只要在合适的时机, 我们可以把一个协程 切换到另一个协程。 只要这个过程中保存或恢
阅读全文
摘要:和选用线程池来关系多线程类似,当程序中设置到多进程编程时,Python 提供了更好的管理多个进程的方式,就是使用进程池。 在利用 Python 进行系统管理的时候,特别是同时操作多个文件目录,或者远程控制多台主机,并行操作可以节约大量的时间。 当被操作对象数目不大时,可以直接利用 multiproc
阅读全文
摘要:Python程序中,在进程和进程之间是不共享全局变量的数据的。 我们来看一个例子: from multiprocessing import Process import os import time nums = [11, 22] def work1(): """子进程要执行的代码""" print
阅读全文
摘要:一、进程的创建 我们先来回忆下之前多线程的实现。 import threading import time def test1(): while True: print("1 ") time.sleep(1) def test2(): while True: print("2 ") time.sle
阅读全文
摘要:程序:所谓的程序,是硬盘上的一个可执行文件,是静态的。 进程:一个程序运行起来后,代码加上用到的资源称之为进程,它是操作系统分配资源的基本单元。 一个程序,对应进程可以有多个。 多任务不仅可以通过线程来实现,进程也是可以的。 进程的状态 实际工作中,任务数往往大于 cpu 的核数,即一定有一些任务正
阅读全文
摘要:一、为什么要使用线程池 多线程的情况下确实可以最大限度发挥多核处理器的计算能力,提高系统的吞吐量和性能。 但是如果随意使用多线程,对系统的性能反而有不利影响。 比如下面的情况: 创建线程是需要时间的,假设线程创建所需时间为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 提供了内置的文件对象,以及对文件、目录进行操作的内置模块,通过这些技术可以很方便地将数据保存到文件(如文本文件等)中。 一、文
阅读全文

浙公网安备 33010602011771号