多任务
同一时间内执行多个任务
并发:在一段时间内交替去执行多个任务
并行:在一段时间内真正的同事一起执行多个任务,任务数量小于或等于CPU的核心数
进程
资源分配的最小单位,它是操作系统进行资源分配和调度运行的基本单位,一个正在运行的程序就是一个进程。
进程的创建步骤
1.导入进程包 import multiprocessing
2.通过继承类创建进程对象 process = multiprocessing.Process()
3.启动进程执行任务 process.start()
process = multiprocessing.Process(target=,args=(,)) | |
target | 进程的目标任务名,这里指的是函数名(方法名) |
name | 进程名,一般不用设置 |
group | 进程组,目前只能使用None |
进程执行带有参数的任务
参数名 | 说明 |
args | 元祖方式传参,参数一定要和参数的顺序保持一致 |
kwargs | 字典的方式传参,参数字典key和参数名保持一致 |
主进程会等待所有子进程结束才会结束程序
设置守护主进程
process.daemon = True
如果主进程结束,子进程立即结束,程序结束
多进程实现本地拷贝案例
线程
线程是程序执行的最小单位,同属一个进程的多个线程共享进程拥有的全部资源
线程的创建步骤
- 导入线程模块 import threading
- 通过线程类创建线程对象 thread = threading.Thread(target=)
- 启动线程执行任务 thread.start()
target | 执行的目标任务名 |
name | 线程名,一般不用设置 |
group | 线程组,目前只能使用None |
daemon | daemon=True,设置线程守护 |
args | 元祖方式传参,参数一定要和参数的顺序保持一致 |
kwargs | 字典的方式传参,参数字典key和参数名保持一致 |
备注:和进程相似
主线程和子线程结束的关系:主线程会等待子线程结束,程序才会结束
同理可以设置守护:thread.setDaemon(True) 在start之前
线程间的执行顺序:由CPU调度决定,无序
区别对比
- 创建进程的资源开销要比创建线程的资源开销大
- 进程是操作系统资源分配的基本单位,线程是CPU调度的基本单位
- 线程不能独立执行,必须依存在进程中