上一篇:线程间通信 | 手把手教你入门Python之一百零三
下一篇:进程和线程的区别 | 手把手教你入门Python之一百零五
本文来自于千锋教育在阿里云开发者社区学习中心上线课程《Python入门2020最新大课》,主讲人姜伟。
多进程的使用
进程
程序:例如xxx.py这是程序,是一个静态的。
进程:一个程序运行起来后,代码+用到的资源 称之为进程,它是操作系统分配资源的基本单元。
不仅可以通过线程完成多任务,进程也是可以的。
进程的状态
工作中,任务数往往大于cpu的核数,即一定有一些任务正在执行,而另外一些任务在等待cpu进行执行,因此导致了有了不同的状态。
- 就绪态:运行的条件都已经满足,正在等在cpu执行。
- 执行态:cpu正在执行其功能。
- 等待态:等待某些条件满足,例如一个程序sleep了,此时就处于等待态。
创建进程
multiprocessing模块就是跨平台版本的多进程模块,提供了一个Process类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另外的事情。
创建子进程时,只需要传入一个执行函数和函数的参数,创建一个Process实例,用start()方法启动。
import multiprocessing, time, os
def dance(n):
for i in range(n):
time.sleep(0.5)
print('正在跳舞{},pid={}'.format(i, os.getpid()))
def sing(m):
for i in range(m):
time.sleep(0.5)
print('正在唱歌{},pid={}'.format(i, os.getpid()))
if __name__ == '__main__':
print('主进程的pid={}'.format(os.getpid()))
# 创建了两个进程
# target 用来表示执行的任务
# args 用来传参,类型是一个元组
p1 = multiprocessing.Process(target=dance, args=(100,))
p2 = multiprocessing.Process(target=sing, args=(100,))
p1.start()
p2.start()
方法说明
Process( target [, name [, args [, kwargs]]])
- target:如果传递了函数的引用,可以任务这个子进程就执行这里的代码
- args:给target指定的函数传递的参数,以元组的方式传递
- kwargs:给target指定的函数传递命名参数
- name:给进程设定一个名字,可以不设定
Process创建的实例对象的常用方法:
- start():启动子进程实例(创建子进程)
- is_alive():判断进程子进程是否还在活着
- join([timeout]):是否等待子进程执行结束,或等待多少秒
- terminate():不管任务是否完成,立即终止子进程
Process创建的实例对象的常用属性:
- name:当前进程的别名,默认为Process-N,N为从1开始递增的整数
- pid:当前进程的pid(进程号)