欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python记录_day30 多进程

程序员文章站 2023-01-15 13:15:26
1、什么是进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 同一个程序执行两次,就会产生两个进程 ## 进程调度算法: 先来先服务 短作业优先 时间片轮转法 多级反馈队列 2、并发和并行 并发是伪并行,只是看起来是 ......

1、什么是进程

进程(process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配调度的基本单位,是操作系统结构的基础。

同一个程序执行两次,就会产生两个进程

## 进程调度算法:

  先来先服务

  短作业优先

  时间片轮转法

  多级反馈队列

 

2、并发和并行

并发是伪并行,只是看起来是同时运行的。它是基于单核的,一个cpu加多道技术就可实现(多道技术:多个进程之间来回切换)

并行:同时运行,要依靠多个cpu才能实现

3、进程状态转换图

python记录_day30 多进程

 

 4、同步/异步

同步:一个任务的进行需要等待前面任务的完成

异步:不需要等待前面任务的完成

5、创建进程

#方式一

python记录_day30 多进程
 1 import time
 2 import os
 3 from multiprocessing import process
 4 
 5 def func1():
 6     time.sleep(2)
 7     print('我是func1')
 8 
 9 def func2():
10     time.sleep(2)
11     print('我是func2')
12     print('子进程id',os.getpid())
13     print('父进程id',os.getppid())
14 
15 
16 if __name__ =='__main__':
17     start = time.time()
18     # func1()
19     # func2()
20     
21     #开子进程
22     p = process(target=func2)
23     p.start()  #告诉系统创建子进程
24     func1()
25     
26     # p2 =process(target=func1)
27     # p2.start()
28     # print('主进程id',os.getpid())
29 
30     end = time.time()
31     diff= end-start
32     print('时间差是》',diff)
创建进程1

#方式2

python记录_day30 多进程
 1 import time
 2 from multiprocessing import process
 3 
 4 class myprocess(process):
 5     #自定义初始化
 6     def __init__(self,n):
 7         super().__init__()  #必须调用父类的初始化,不然会报错
 8         self.n = n
 9     # run方法要重写,里面是你想让子进程运行的东西
10     def run(self):
11         print(self.n)
12         time.sleep(2)
13         print('子进程结束')
14 
15 if __name__ == '__main__':
16     p = myprocess(520)
17     p.start()
18     p.join()
19 
20     print('主进程结束')
创建进程2

 

6、注意

#进程之间是空间隔离的(保证数据安全)

#由于进程创建机制不同,在windows下创建子进程的语句要放在 if __name__ =="__main__" 里,因为windows系统创建进  程时相当于import,会先执行一遍文件并拷贝,如果不放在 if 里就会循环调用,报错