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

python--进程初识详解

程序员文章站 2022-05-09 11:47:48
进程:通俗理解一个运行的程序或者软件,进程是操作系统资源分配的基本单位 1.1、导入进程模块 import multiprocessing 1.2、Process进程类的语法结构如下: Process([group[, target[, name[,args[,kwargs]]]]]) group: ......


进程:通俗理解一个运行的程序或者软件,进程是操作系统资源分配的基本单位

1.1、导入进程模块
import multiprocessing

1.2、process进程类的语法结构如下:

process([group[, target[, name[,args[,kwargs]]]]])

group: --指定进程组,目前只能使用none
target: --执行的目标任务名
name: --进程名字
args: --以元组方式给执行任务传参
kwargs: --以字典方式给执行任务传参

process创建 的实例对象的常用方法:

start(), 启动子进程实例(创建子进程)
join(timeout), 是否等待子进程执行结束,或等待多少秒
terminate(), 不管任务是否完成,立即终止进程

process创建的实例对象的常用属性:

name 当前进程的别名,默认为process-n,n为从1开始递增的整数。
pid 当前进程的pid(进程号)

 

一、多进程完成多任务代码

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 """
 4 python进程
 5 """
 6 import multiprocessing
 7 import time
 8 
 9 def run_proc():
10     """
11     子进程要执行的代码
12     :return:
13     """
14     while true:
15         print("---2---")
16         time.sleep(1)
17 
18 if __name__ == "__main__":
19     #创建子进程
20     sub_process = multiprocessing.process(target=run_proc)
21     #启动子进程
22     sub_process.start()
23     while true:
24         print("----1----")
25         time.sleep(1)

代码执行结果:

python--进程初识详解

 

二、获取进程pid

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 """
 4 获取进程pid
 5 """
 6 
 7 import multiprocessing
 8 import time
 9 import os
10 
11 def work():
12     #查看当前进程
13     current_process = multiprocessing.current_process()
14     print("work:", current_process)
15     #获取当前进程的编号
16     print("work进程编号:", current_process.pid, os.getpid())
17     #获取父进程的编号
18     print("work父进程的编号:", os.getppid())
19     for i in range(10):
20         print("工作中....")
21         time.sleep(0.2)
22         #扩展,根据进程编号杀死对应的进程
23         os.kill(os.getpid(), 9)
24 
25 if __name__ == "__main__":
26     #查看当前进程
27     current_process = multiprocessing.current_process()
28     print("main:", current_process)
29     #获取当前里程的编号
30     print("main进程的编号:", current_process.pid)
31 
32     #创建子进程
33     sub_process = multiprocessing.process(target=work)
34     #启动进程
35     sub_process.start()
36 
37     #主进程执行打印信息操作
38     for i in range(5):
39         print("我在主进程中执行....")
40         time.sleep(0.2)

代码执行结果:

python--进程初识详解

 

三、进程的基本状态及状态之间的关系

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 """
 4 给子进程指定的函数传递参数
 5 """
 6 
 7 import multiprocessing
 8 
 9 #定义一个用于显示信息的方法
10 def show_info(name, age):
11     print("name:", name, "; age:", age)
12 
13 if __name__ == "__main__":
14     sub_process = multiprocessing.process(target=show_info, args=("yusheng_liang", 20))
15     #启动进程
16     sub_process.start()

代码执行结果:

python--进程初识详解

 

四、进程之间不共享全局变量

注意:创建子进程其实是对主进程进行拷贝,进程之间相互独立,访问的全局变量不是同一个,所以进程之间不共享全局变量

#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
进程之间不共享全局变量
"""
import multiprocessing
import time

#定义全局变量
my_list = list()

#定义写入数据的方法
def write_data():
    for i in range(5):
        my_list.append(i)
        time.sleep(0.2)
    print("write_data: ", my_list)

#定义读取数据的方法
def read_data():
    print("read_data: ", my_list)

if __name__ == "__main__":
    #创建写入数据的进程
    write_process = multiprocessing.process(target=write_data)
    #创建读取数据的进程
    read_process = multiprocessing.process(target=read_data)

    write_process.start()

    #主进程等待写入进程执行完成以后代码,再继续往下执行
    write_process.join()
    read_process.start()

代码执行结果:

python--进程初识详解

 

 

五、主进程会等待所有的子进程执行完成程序再退出

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 """
 4 主进程会等待所有的子进程执行完成程序再退出
 5 """
 6 import multiprocessing
 7 import time
 8 
 9 #测试子进程是否执行完成以后主进程才能退出
10 def work():
11     for i in range(7):
12         print("工作中.....")
13         time.sleep(0.2)
14 
15 if __name__ == "__main__":
16     #创建子进程
17     work_process = multiprocessing.process(target=work)
18     work_process.start()
19 
20     #让主进程等待1秒钟
21     time.sleep(1)
22     print("主进程执行完成了啦!!")
23 

代码执行结果:

python--进程初识详解

 

六、销毁子进程的代码

 

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 """
 4 主进程会等待所有的子进程执行完成程序再退出
 5 """
 6 import multiprocessing
 7 import time
 8 
 9 #测试子进程是否执行完成以后主进程才能退出
10 def work():
11     for i in range(7):
12         print("工作中.....")
13         time.sleep(0.2)
14 
15 if __name__ == "__main__":
16     #创建子进程
17     work_process = multiprocessing.process(target=work)
18     work_process.start()
19 
20     #让主进程等待1秒钟
21     time.sleep(1)
22     print("主进程执行完成了啦!!")
23 
24     #让子进程直接销毁,表示终止执行,主进程退出之前,把所有的子进程直接销毁就可以了
25     work_process.terminate()

 

代码执行的结果:

python--进程初识详解