系统资源占用量:
进程>线程>协程
一个程序里至少有一个主进程,一个主进程至少有一个主线程
进程
优点:
稳定性高,一个进程崩溃了。不会影响其他进程
缺点:
创建进程开销巨大
操作系统能同时运行进程数目有限
在Python中创建进程:
需要用到的模块和类:multiprocessing模块 Process类
创建进程对象:
p = Process(target=func, name=‘任务1’, args=(1, ‘aa’), kwargs=’’)
Process(target=函数, name=进程的名字,args=(给函数传递的参数—>需要是可迭代的参数))
启动进程并执行任务 | p.start() |
只是执行了任务但是没有启动进程 | p.run() |
中断该进程 | p.terminate() |
获取当前进程id | os.getpid() |
获取父进程id | os.getppid() |
在使用多进程是,对于全局变量访问的策略:
在每一个全局变量里面都放一个m变量,
保证每个进程访问变量时互不干扰
import os
from multiprocessing import Process
n = 4
def func1(*args):
global n
n += 5
print(os.getpid(), n, os.getppid(),)
def func2(*args):
global n
n += 6
print(os.getpid(), n,os.getppid())
p1 = Process(target=func1,args=(1,))
p2 = Process(target=func2,args=(2,))
if __name__ == '__main__':
p1.start()
p2.start()
# 输出结果
15016 9 15600
17556 10 15600 # 可以看到两个进程的进程id是不同的,都对变量n进行了修改,得出的结果也是分开计算,互不干扰的
进程的自定义:
继承Process类,重写run方法
自定义在运行run方法的时候需要运行的代码
class Myprocess(Process):
def run(self):
pass
p = Myprocess()