摘要: 协程,又称微线程,纤程。英文名 Coroutine。 协程是 Python 中另外一种实现多任务的方式,只不过比线程更小,占用更小执行单元(理解为需要的资源)。 为啥说它是一个执行单元,因为它自带 CPU 上下文。这样只要在合适的时机, 我们可以把一个协程 切换到另一个协程。 只要这个过程中保存或恢 阅读全文
posted @ 2020-10-19 08:06 小名叫小明 阅读(266) 评论(0) 推荐(0) 编辑
摘要: 和选用线程池来关系多线程类似,当程序中设置到多进程编程时,Python 提供了更好的管理多个进程的方式,就是使用进程池。 在利用 Python 进行系统管理的时候,特别是同时操作多个文件目录,或者远程控制多台主机,并行操作可以节约大量的时间。 当被操作对象数目不大时,可以直接利用 multiproc 阅读全文
posted @ 2020-10-15 08:19 小名叫小明 阅读(173) 评论(0) 推荐(0) 编辑
摘要: Python程序中,在进程和进程之间是不共享全局变量的数据的。 我们来看一个例子: from multiprocessing import Process import os import time nums = [11, 22] def work1(): """子进程要执行的代码""" print 阅读全文
posted @ 2020-10-14 08:17 小名叫小明 阅读(454) 评论(0) 推荐(0) 编辑
摘要: 一、进程的创建 我们先来回忆下之前多线程的实现。 import threading import time def test1(): while True: print("1 ") time.sleep(1) def test2(): while True: print("2 ") time.sle 阅读全文
posted @ 2020-10-12 08:17 小名叫小明 阅读(286) 评论(0) 推荐(0) 编辑
摘要: 程序:所谓的程序,是硬盘上的一个可执行文件,是静态的。 进程:一个程序运行起来后,代码加上用到的资源称之为进程,它是操作系统分配资源的基本单元。 一个程序,对应进程可以有多个。 多任务不仅可以通过线程来实现,进程也是可以的。 进程的状态 实际工作中,任务数往往大于 cpu 的核数,即一定有一些任务正 阅读全文
posted @ 2020-10-05 08:15 小名叫小明 阅读(1195) 评论(0) 推荐(0) 编辑
摘要: 一、为什么要使用线程池 多线程的情况下确实可以最大限度发挥多核处理器的计算能力,提高系统的吞吐量和性能。 但是如果随意使用多线程,对系统的性能反而有不利影响。 比如下面的情况: 创建线程是需要时间的,假设线程创建所需时间为T1,线程执行任务时间为T2,线程销毁时间为T3,而往往T1+T3>T2。所以 阅读全文
posted @ 2020-09-30 08:05 小名叫小明 阅读(577) 评论(0) 推荐(0) 编辑
摘要: 一、死锁 在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源,就会造成死锁。 就好像在现实社会中,男女双方在闹别扭之后,都在等待对方先道歉。 如果双方都这样固执地等待对方先开口,弄不好,就 over 了。 尽管死锁很少发生,但一旦发生就会造成应用的停止响应。 下面看一个 阅读全文
posted @ 2020-09-29 07:58 小名叫小明 阅读(449) 评论(0) 推荐(0) 编辑
摘要: 一、同步概念 同步就是协同步调,按预定的先后次序进行运行。如:你说完,我再说。 "同"字从字面上容易理解为一起动作。 其实不是,在这里,"同"字应是指协同、协助、互相配合。 线程同步,可理解为线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,于是停下来,示意B运行;B执行,再将结果给A;A再 阅读全文
posted @ 2020-09-28 08:12 小名叫小明 阅读(1605) 评论(0) 推荐(0) 编辑
摘要: 在之前,我们讲过了,Python 中多个线程之间是可以共享全局变量的数据的。 但是,多线程共享全局变量是会出问题的。 假设两个线程 t1 和 t2 都要对全局变量 g_num (默认是0)进行加1运算,t1 和 t2 都各对 g_num 加10次,g_num 的最终的结果应该为20。 但是由于多线程 阅读全文
posted @ 2020-09-25 08:12 小名叫小明 阅读(2437) 评论(0) 推荐(0) 编辑
摘要: 一、多线程共享全局变量 首先我们来回忆下在函数中修改全局变量的情况。 在一个函数中,对全局变量进行修改的时候,到底是否需要使用 global 进行说明,要看是否对全局变量的执行指向进行了修改。 如果修改了执行指向,即让全局变量指向了一个新的地方,那么必须使用 global。 如果仅仅是修改了指向的空 阅读全文
posted @ 2020-09-24 08:29 小名叫小明 阅读(2692) 评论(0) 推荐(0) 编辑