进程
进程
进程理论
# 进程与程序的区别 程序:一堆代码(死的) 进程:正在运行的程序(活的) # 单核情况下的进程调度 进程调度算法演变 1.FCFS 先来先服务 对短作业不友好 2.短作业优先调度算法 对长作业不友好 3.时间片轮转法+多级反馈队列 先分配给新的多个进程相同的时间片 之后根据进程消耗的时间片多少分类别...... # 进程三状态图(******) 就绪态 运行态 阻塞态 进程要想进入运行态必须先经过就绪态 # 同步与异步(******) '''用于描述任务的提交方式''' 同步:提交完任务之后原地等待任务的返回结果 期间不做任何事 异步:提交完任务之后不原地等待任务的返回结果 直接去做其他事 结果由反馈机制自动提醒 # 阻塞与非阻塞(******) '''用于描述任务的执行状态''' 阻塞:阻塞态 非阻塞:就绪态 运行态
创建进程
# 代码层面创建进程 from multiprocessing import Process import time import os def test(name): print(os.getpid()) # 获取进程号 print(os.getppid()) # 获取父进程号 print('%s正在运行' % name) time.sleep(3) print('%s已经结束' % name) if __name__ == '__main__': p = Process(target=test, args=('jason',)) # 生成一个进程对象 p.start() # 告诉操作系统开设一个新的进程 异步提交 print(os.getpid()) print('主') """ 在windows中开设进程类似于导入模块 从上往下再次执行代码 一定需要在__main__判断语句内执行开设进程的代码 在linux中是直接将代码完整的复制一份执行 不需要在__main__判断语句内执行 """ class MyProcess(Process): def __init__(self, name): super().__init__() self.name = name def run(self): print('%s正在运行' % self.name) time.sleep(3) print('%s已经结束' % self.name) if __name__ == '__main__': p = MyProcess('jason') p.start() print('主')
进程的join方法
from multiprocessing import Process import time def test(name, n): print('%s is running' % name) time.sleep(n) print('%s is over' % name) if __name__ == '__main__': p_list = [] start_time = time.time() for i in range(1, 4): p = Process(target=test, args=(i, i)) p.start() p_list.append(p) # p.join() # 串行 9s+ for p in p_list: p.join() print(time.time() - start_time) # p = Process(target=test, args=('jason',)) # p1 = Process(target=test, args=('kevin',)) # p2 = Process(target=test, args=('oscar',)) # p.start() # p1.start() # p2.start() print('主进程')
进程间默认无法交互
# 进程间数据是相互隔离的 from multiprocessing import Process money = 100 def test(): global money money = 999 if __name__ == '__main__': p = Process(target=test) p.start() # 先确保子进程运行完毕了 再打印 p.join() print(money)
进程的对象方法
1.current_process查看进程号 2.os.getpid() 查看进程号 os.getppid() 查看父进程进程号 3.进程的名字,p.name直接默认就有,也可以在实例化进程对象的时候通过关键字形式传入name='' 4.p.terminate() 杀死子进程 5.p.is_alive() 判断进程是否存活 3,4结合看不出结果,因为操作系统需要反应时间。主进程睡0.1即可看出效果