1 同步和异步
1.1 串行、并行、并发
串行:
- 多任务依次执行,上一个没完成不能执行后续任务
并发:
- 多任务依次执行,过程中多任务可替代(交替)执行
- 任务间快速切换(非常快),看上去像是同时执行
- 某时刻单个任务执行,某时段是多个任务执行
- 同时开始,但不同时执行
并行:
- 多任务没有顺序同时执行
- 最终结果跟耗时最长任务有关
1.2 同步和异步
同步:
- 串行执行过程,协同步调,多个任务按预定先后次序依次执行
异步:
- 并发和并行过程,多个任务在同一时间段内执行,每个任务都不会等待其他任务
1.3 操作系统的多任务
一般情况下,计算机多任务实现方式:
- 多进程实现的多任务操作:并行执行(默认)
- 多线程实现的多任务操作:并发执行(默认)
- 协程实现的多任务操作:事件处理并发执行(默认)
2 进程多任务
2.1 进程
- 进程是计算机中一个独立执行的程序单元(每一个进程都有自己独立的内存空间和系统资源)
- 一个软件(程序)可以包含多个进程
- 是计算机中最小的数据分配单元
- 一个程序可包含多个进程,但至少有一个主进程
2.2 基本语法
只有一个进程时:
def test(content):
while True:
print(content)
s1 = "风吹仙袂飘飖举,犹似霓裳羽衣舞。"
test(s1)
两个或以上进程(相当于同时运行多个python文件):
- python中,多进程使用multiprocessing包
import multiprocessing
def test(content):
while True:
print(content)
s1 = "风吹仙袂飘飖举,犹似霓裳羽衣舞。"
s2 = "玉容寂寞泪阑干,梨花一枝春带雨。"
# 多进程运行必须写在if __name__ == "__main__":中
if __name__ == "__main__":
"""main启动方法"""
# 创建进程
p1 = multiprocessing.Process(target=test, args=(s1,)) # 也可以使用kwargs(字典参数)的传参方式
p2 = multiprocessing.Process(target=test, args=(s2,))
# 启动进程
p1.start()
p2.start()
其中有一个是主进程
使用面向对象实现:
- run()是固定语法,启动进程会自动执行run()方法中代码
import multiprocessing
class Emperor(multiprocessing.Process):
def run(self):
print("含情凝睇谢君王,一别音容两渺茫。")
class Consort(multiprocessing.Process):
def run(s