
多任务编程
通过应用程序利用计算机的多个核心达到同时执行多个任务的目的,一次提高计算机运行效率。
缘 源 园
https://mp.weixin.qq.com/s/EtndbQk9m9n75xiQsDcvww 欢迎关注博主微信公众号。一起交流互动更多问题。
展开
-
进程和线程的对比
1. 进程和线程的对比的三个方向关系对比 区别对比 优缺点对比2. 关系对比线程是依附在进程里面的,没有进程就没有线程。 一个进程默认提供一条线程,进程可以创建多个线程。2. 区别对比 进程之间不共享全局变量 线程之间共享全局变量,但是要注意资源竞争的问题,解决办法: 互斥锁或者线程同步 创建进程的资源开销要比创建线程的资源开销要大 进程是操作系统资源分配的基本单位,线程是CPU调度的基本单位 线程不能够独立执行,必须依存在进程中 .原创 2021-04-14 00:08:03 · 77 阅读 · 0 评论 -
死锁是什么?
死锁的概念死锁: 一直等待对方释放锁的情景就是死锁死锁的结果会造成应用程序的停止响应,不能再处理其它任务了。#死锁:一直等待对方释放锁的情景叫做死锁import threadinglock=threading.Lock()#需求:多线程同时根据下标在列表中取值,要保证同一时刻只能有一个线程去取值def get_value(index): #上锁 lock.acquire() my_list=[1,4,6] #判断下标是否越界 if..原创 2021-04-14 00:06:37 · 107 阅读 · 0 评论 -
什么是互斥锁
互斥锁是什么?互斥锁: 对共享数据进行锁定,保证同一时刻只能有一个线程去操作。注意: 互斥锁是多个线程一起去抢,抢到锁的线程先执行,没有抢到锁的线程需要等待,等互斥锁使用完释放后,其它等待的线程再去抢这个锁。互斥锁的使用threading模块中定义了Lock变量,这个变量本质上是一个函数,通过调用这个函数可以获取一把互斥锁。import threadingg_num=0lock=threading.Lock()#循环100万次执行的任务def task1(): #.原创 2021-04-14 00:06:17 · 18422 阅读 · 4 评论 -
线程之间共享全局变量数据出现错误问题
需求:定义一个列表类型的全局变量 创建两个子线程分别执行向全局变量添加数据的任务和向全局变量读取数据的任务 查看线程之间是否共享全局变量数据需求:定义两个函数,实现循环100万次,每循环一次给全局变量加1 创建两个子线程执行对应的两个函数,查看计算后的结果import threadingg_num=0#循环100万次执行的任务def task1(): for i in range(1000000): global g_num #声明修改全局变量的内存地址原创 2021-04-13 23:16:01 · 632 阅读 · 0 评论 -
线程之间共享全局变量
import threadingimport time#定义全局变量列表g_list=[]#添加数据的任务def add_data(): for i in range(3): # 每循环一次添加到全局变量 g_list.append(i) print("add:", i) time.sleep(0.2) print("添加完成:", g_list)def read_data(): print("rea.原创 2021-04-13 23:15:50 · 197 阅读 · 0 评论 -
主进程会等待所有的子进程执行结束再结束
主进程会等待所有的子进程执行结束再结束。import multiprocessingimport timedef task(): while True: print("任务执行中...") time.sleep(0.2)#标准python写法,直接执行的模块需要加上判断是否是主模块的代码if __name__=="__main__": sub_process=multiprocessing.Process(target=task) # 把原创 2021-04-13 23:15:39 · 1315 阅读 · 0 评论 -
主线程会等待子线程执行结束再结束
import threading #这是一个模块,不是一个包import timedef task(): while True: print("唱歌中...") time.sleep(0.2)#创建子线程if __name__ == '__main__': # sing_thread=threading.Thread(group=None,target=task,daemon=True) sing_thread=threading.Thr.原创 2021-04-13 23:15:29 · 308 阅读 · 0 评论 -
进程之间执行是无序的
import multiprocessingimport timeimport osdef task(): time.sleep(1) print(multiprocessing.current_process())if __name__=="__main__": task_process_id=os.getpid() print("task_process_id:",task_process_id) task_process_parent_id=os..原创 2021-04-13 23:15:16 · 205 阅读 · 0 评论 -
线程之间执行是无序的
线程之间执行是无序的#操作系统调用进程的,cpu调用线程import threadingimport timedef task(): time.sleep(1) print(threading.current_thread())if __name__=="__main__": for i in range(20): #循环创建大量数据,测试线程之间执行是否无须 sub_thread=threading.Thread(target=task)原创 2021-04-13 23:15:02 · 358 阅读 · 0 评论 -
线程执行带有参数的任务
线程执行带有参数的任务的介绍Thread类执行任务并给任务传参数有两种方式:args 表示以元组的方式给执行任务传参 kwargs 表示以字典方式给执行任务传参import threading #这是一个模块,不是一个包import timedef show_info(name,age): print("name:%s age:%d" % (name,age))def dance(name,age): print("name:%s age:%d" % (name,原创 2021-04-13 23:14:45 · 228 阅读 · 0 评论 -
多线程的使用
1. 导入线程模块#导入线程模块import threading2. 线程类Thread参数说明Thread([group [, target [, name [, args [, kwargs]]]]])group: 线程组,目前只能使用None target: 执行的目标任务名 args: 以元组的方式给执行任务传参 kwargs: 以字典方式给执行任务传参 name: 线程名,一般不用设置3. 启动线程启动线程使用start方法import thr..原创 2021-04-13 23:13:47 · 87 阅读 · 0 评论 -
什么是线程
1. 线程的介绍在Python中,想要实现多任务除了使用进程,还可以使用线程来完成,线程是实现多任务的另外一种方式。2. 线程的概念线程是进程中执行代码的一个分支,每个执行分支(线程)要想工作执行代码需要cpu进行调度 ,也就是说线程是cpu调度的基本单位,每个进程至少都有一个线程,而这个线程就是我们通常说的主线程。3. 线程的作用多线程可以完成多任务多线程效果图:...原创 2021-04-13 23:13:24 · 98 阅读 · 0 评论 -
进程之间不共享全局变量
import multiprocessingimport time#定义全局变量列表g_list=list() #等价于空的列表[]#添加数据的任务def add_data(): for i in range(3): # 因为列表是不可变类型,可以在原有内存的基础上修改数据,并且修改后内存地址不变 # 所以不需要加global关键字 # 加上global表示声明要修改全局变量的内存地址 g_list.append(i.原创 2021-04-10 09:24:27 · 1025 阅读 · 0 评论 -
进程执行带有参数的任务
1. 进程执行带有参数的任务的介绍前面我们使用进程执行的任务是没有参数的,假如我们使用进程执行的任务带有参数,如何给函数传参呢?Process类执行任务并给任务传参数有两种方式:args 表示以元组的方式给执行任务传参 kwargs 表示以字典方式给执行任务传参2. args参数的使用, kwargs参数的使用import multiprocessing#显示信息的任务def show_info(name,age): print(name,age)if __name.原创 2021-04-10 09:24:13 · 276 阅读 · 1 评论 -
获取进程编号
1. 获取进程编号的目的获取进程编号的目的是验证主进程和子进程的关系,可以得知子进程是由那个主进程创建出来的。获取进程编号的两种操作获取当前进程编号 获取当前父进程编号2. 获取当前进程编号os.getpid()表示获取当前进程编号示例代码:import multiprocessingimport timeimport os# 跳舞任务def dance(): # 获取当前进程的编号 print("dance:", os.getpid())..原创 2021-04-10 09:23:56 · 592 阅读 · 0 评论 -
多进程的使用
1 导入进程包#导入进程包import multiprocessing2. Process进程类的说明Process([group [, target [, name [, args [, kwargs]]]]])group:指定进程组,目前只能使用None target:执行的目标任务名 name:进程名字 args:以元组方式给执行任务传参 kwargs:以字典方式给执行任务传参Process创建的实例对象的常用方法:start():启动子进程实例(创建子进程).原创 2021-04-10 09:23:37 · 183 阅读 · 0 评论 -
进程
1. 进程的介绍在Python程序中,想要实现多任务可以使用进程来完成,进程是实现多任务的一种方式。2. 进程的概念一个正在运行的程序或者软件就是一个进程,它是操作系统进行资源分配的基本单位,也就是说每启动一个进程,操作系统都会给其分配一定的运行资源(内存资源)保证进程的运行。比如:现实生活中的公司可以理解成是一个进程,公司提供办公资源(电脑、办公桌椅等),真正干活的是员工,员工可以理解成线程。注意:一个程序运行后至少有一个进程,一个进程默认有一个线程,进程里面可以创建多个线程.原创 2021-04-01 00:26:42 · 89 阅读 · 0 评论 -
多任务的介绍
多任务的概念多任务是指在同一时间内执行多个任务,例如: 现在电脑安装的操作系统都是多任务操作系统,可以同时运行着多个软件。多任务效果图:多任务的执行方式并发 并行并发:在一段时间内交替去执行任务。例如:对于单核cpu处理多任务,操作系统轮流让各个软件交替执行,假如:软件1执行0.01秒,切换到软件2,软件2执行0.01秒,再切换到软件3,执行0.01秒……这样反复执行下去。表面上看,每个软件都是交替执行的,但是,由于CPU的执行速度实在是太快了,我们感...原创 2021-04-01 00:26:20 · 422 阅读 · 0 评论