day 37 进程

一.进程理论
进程 是个资源分配单位
进程调度 : 就是多个进程(运行中的程序)在操作系统的控制下被CPU执行,去享用计算机的资源
先来先服务
短作业优先
时间片轮转
多级反馈队列
进程调度的过程是不能够随意被程序影响的
程序的并行与并发
并行更快
并发只是宏观上的同时执行
进程一共有三个状态:
就绪 运行 阻塞
同步
异步
阻塞
非阻塞
进程
pid Process ID 进程ID
ppid parent process id 父进程ID
父进程 负责回收一些子进程的资源
子进程
 1 import os
 2 from multiprocessing import Process
 3 def func():
 4     print('in func',os.getpid(),os.getppid())
 5 
 6 if __name__ == '__main__':
 7     print('in main',os.getpid(),os.getppid())
 8     p = Process(target = func)
 9     p.start()
10     # p.join()
11     print('主进程执行完毕')
创建普通进程
 1 import os
 2 import time
 3 from multiprocessing import Process
 4 def func(num):
 5     # time.sleep()
 6     print('in func',num,os.getpid(),os.getppid())
 7 
 8 
 9 def func1(num):
10     print('in func1',num ,os.getpid(),os.getppid())
11 if __name__ == '__main__':
12     print('in main',os.getpid(),os.getppid())
13     p1 = Process(target=func,args = (1,))
14     p1.start()
15     p2 = Process(target=func1,args = (2,))
16     p2.start()
17     print('主进程结束了')
创建带参数的进程
 1 import os
 2 import time
 3 from multiprocessing import Process
 4 def func(num):
 5     # time.sleep()
 6     print('in func',num,os.getpid(),os.getppid())
 7 
 8 
 9 def func1(num):
10     print('in func1',num ,os.getpid(),os.getppid())
11 if __name__ == '__main__':
12     print('in main',os.getpid(),os.getppid())
13     for i in range(10):
14         p1 = Process(target=func,args = (i,))
15         p1.start()
16     print('主进程结束了')
开启多个子进程
 1 import os
 2 import time
 3 from multiprocessing import Process
 4 def func(num):
 5     # time.sleep()
 6     print('in func',num,os.getpid(),os.getppid())
 7 
 8 
 9 def func1(num):
10     print('in func1',num ,os.getpid(),os.getppid())
11 if __name__ == '__main__':
12     print('in main',os.getpid(),os.getppid())
13     l = []
14     for i in range(10):
15         p1 = Process(target=func,args = (i,))
16         p1.start()
17         l.append(p1)
18     for v in l:
19         v.join()
20     print('主进程结束了')
用join方法解决 主程序在子程序执行后执行
 1 import os
 2 import time
 3 from multiprocessing import Process
 4 def func(num):
 5     time.sleep(2)
 6     print('in func',os.getpid(),os.getppid())
 7 if __name__ =='__main__':
 8     print('in main',os.getpid(),os.getppid())
 9     p1 = Process(target = func,args = (1,)) #进程对象
10     p1.start()
11     print(p1.is_alive())
12     p1.terminate()
13     time.sleep(1)
14     print(p1.is_alive())
15     print('主进程的代码结束了')
检测子进程状态和强制结束进程
 1 import os
 2 import time
 3 from multiprocessing import Process
 4 class MyProcess(Process):
 5     def __init__(self,num):
 6         super().__init__()
 7         self.num = num
 8     def run(self):
 9         print('in run ',self.num,os.getpid(),os.getppid())
10 if __name__ == '__main__':
11     print('in main ', os.getpid(), os.getppid())
12     p = MyProcess(1)
13     p.start()
用面向对象开启子进程

 

posted @ 2018-07-24 20:14  mike1607  阅读(89)  评论(1)    收藏  举报