python的Process进程介绍和使用
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
二.进程Process模块对于线程操作可以用threading模块,那么对于进程的创建python同样也提供了Process模块,创建进程时需要导入该模块,语法如下:
1
2
3
4
5
# 导入进程模块
from multiprocessing import Process
# 创建进程
p = Process(group=None, target=None, name=None, args=(), kwargs={})
参数介绍:
group— 参数未使用,默认值为None;
target— 表示调用对象,即子进程要执行的任务(函数名字);
args— 子进程对应函数的参数,并且类型是元组tuple;
kwargs— 子进程对应函数的参数,并且类型是字典dict,如kwargs = {‘name’:Jack, ‘age’:18};
name— 子进程名称;
返回值:返回进程实例对象;
三.进程Process函数介绍其实进程Process的函数和线程threading类似,具体如下:
1.start()— 启动进程;
2.terminate()— 强制终止进程,不会进行任何清理操作。如果该进程终止前,创建了子进程,那么该子进程在其强制结束后变为僵尸进程;如果该进程还保存了一个锁那么也将不会被释放,进而导致死锁,使用时,要注意;
3.is_alive()— 判断某进程是否存活,存活返回True,否则False;
4.join([timeout])— 主线程等待子线程终止。timeout为可选择超时时间;需要强调的是,p.join只能join住start开启的进程,而不能join住run开启的进程 ;
5.daemon— 默认值为False,如果设置为True,代表该进程为后台守护进程;当该进程的父进程终止时,该进程也随之终止;并且设置为True后,该进程不能创建子进程,设置该属性必须在start()之前;
6.name— 进程名称;
7.pid— 进程ID标识,pid,值得注意的是:如果在start函数之前获取pid默认为None,因为进程还未创建,获取不到pid;
8.exitcode— 进程运行时为None,如果为-N,表示被信号N结束了;
9.authkey— 进程身份验证,默认是由os.urandom()随机生成32字符的字符串。这个键的用途是设计涉及网络连接的底层进程间的通信提供安全性,这类连接只有在具有相同身份验证才能成功;
四.进程Process使用1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:何以解忧
@Blog(个人博客地址): shuopython.com
@WeChat Official Account(微信公众号):猿说python
@Github:www.github.com
@File:python_process.py
@Time:2019/12/21 21:25
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
"""
from multiprocessing import Process
def people_info(*args,**kwargs):
print(args,kwargs)
def main():
# 信息列表
list_info = [{"name":"zhangsan","height":"175cm"},
{"name": "lisi", "height": "155cm"},
{"name": "wangwu", "height": "195cm"},
{"name": "liqi", "height": "166cm"},
{"name": "wangba", "height": "125cm"},]
# 创建进程
for i in range(5):
p = Process(target=people_info,args=(i,),kwargs=list_info[i])
# 设置为守护进程,必须设置在start函数之前,否则会产生异常
# 默认为False,即主进程会等待子进程结束之后才结束,
# 如果设置为True,主进程结束之后所有的子进程自动结束,不管子进程是否已经执行完所有任务
# p.daemon = True
# 启动进程
p.start()
# 获取进程pid,如果在start函数之前获取pid,默认为None,因为进程还没启动
print("进程process pid = ",p.pid)
# 获取进程名字
print("进程process name = ",p.name)
# 获取进程pid
print("进程process exitcode = ",p.exitcode)
if __name__ == "__main__":
main()
输出结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
进程process pid =2600
进程process name =Process-1
进程process exitcode =None
进程process pid =4372
进程process name =Process-2
进程process exitcode =None
进程process pid =14124
进程process name =Process-3
进程process exitcode =None
进程process pid =10920
进程process name =Process-4
进程process exitcode =None
进程process pid =4892
进程process name =Process-5
进程process exitcode =None
(0,) {'name': 'zhangsan', 'height': '175cm'}
(1,) {'name': 'lisi', 'height': '155cm'}
(2,) {'name': 'wangwu', 'height': '195cm'}
(3,) {'name': 'liqi', 'height': '166cm'}
(4,) {'name': 'wangba', 'height': '125cm'}
小窍门:Python 的os
模块封装了常见的系统调用,其中就包括:
1
2
3
os.fork()创建子进程
os.getpid()获取自身 ID
os.getppid()获取父进程 ID
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。