python 进程Process模块(40)

进程Process是对各种资源管理的集合,包含对各种资源的调用、内存的管理、网络接口的调用;一个进程Process可以包含多个子进程,启动一个进程的时候会自动创建一个线程,进程里的第一个线程就是主线程(即python __name__ == ‘__main__’);

二.进程Process模块

对于线程操作可以用threading模块,那么对于进程的创建python同样也提供了Process模块,创建进程时需要导入该模块,语法如下:

# 导入进程模块
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使用

# !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()

输出结果:

进程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 模块封装了常见的系统调用,其中就包括:

os.fork() 创建子进程
os.getpid() 获取自身 ID
os.getppid() 获取父进程 ID

关于进程Process创建就介绍到这里,不知道大家发现没有,进程process的创建和线程threading的创建非常相似,那么python进程和线程到底又有什么区别呢?关于python进程和线程的区别请参考:

python进程Process与线程threading的区别

猜你喜欢:

1.python 线程threading模块

2.python 线程互斥锁Lock

3.python 线程事件Event

4.python 线程定时器Timer

转载请注明:猿说Python » python 进程Process模块

技术交流、商务合作请直接联系博主

扫码或搜索:猿说python

猿说python

微信公众号 扫一扫关注

原文地址:https://www.cnblogs.com/shuopython/p/12257987.html

时间: 2024-08-27 13:21:48

python 进程Process模块(40)的相关文章

python 进程 multiprocessing模块

一.multiprocess.process模块 1.process类 Process([group [, target [, name [, args [, kwargs]]]]]),由该类实例化得到的对象,表示一个子进程中的任务(尚未启动) 强调: 1. 需要使用关键字的方式来指定参数 2. args指定的为传给target函数的位置参数,是一个元组形式,必须有逗号 参数介绍: group参数未使用,值始终为None target表示调用对象,即子进程要执行的任务 args表示调用对象的位置

Node.js进程管理之Process模块

在前面Node.js事件运行机制也有提到,Node.js应用在单个线程运行,但是现在大部分服务器都是多处理器,为了方便使用多个进程,Node.js提供了3个模块.Process模块提供了访问正在运行的进程.child_process模块可以创建子进程,并与他们通信.cluster模块提供了实现共享相同端口的集群服务能力,允许多个请求同时处理. 一.Process模块是一个无须使用require()就可以从node.js应用程序进行访问的全局对象. 二.进程I/O管道 Process为进程stdi

Python之进程 - multiprocessing模块

? 我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创建的.因此,运行起来的python程序也是一个进程,那么我们也可以在程序中再创建进程.多个进程可以实现并发效果,也就是说,当我们的程序中存在多个进程的时候,在某些时候,就会让程序的执行速度变快.以我们之前所学的知识,并不能实现创建进程这个功能,所以我们就需要借助python中强大的模块. ? 仔细说来,multiprocess不是一个模块而是python中一个操作.管理进程的包. 之所以叫multi是取自multipl

Python中subprocess 模块 创建并运行一个进程

python的subprocess模块,看到官方声明里说要尽力避免使用shell=True这个参数,于是测试了一下: from subprocess import call import shlex cmd = "cat test.txt; rm test.txt" call(cmd, shell=True) 运行之后: 1:打开并浏览了test.txt文件 2:删除了test.txt文件 from subprocess import call import shlex cmd = &

PYTHON学习第二模块 python内置模块介绍

1 >>> import time 2 >>> time.time() 3 1491064723.808669 4 >>> # time.time()返回当前时间的时间戳timestamp(定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数)的方法,无参数 5 >>> time.asctime() 6 'Sun Apr 2 00:39:32 2017' 7 >>> # time.asctim

Python进程、线程、协程详解

进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配.任务的调度. 程序是运行在系统上的具有某种功能的软件,比如说浏览器,音乐播放器等. 每次执行程序的时候,都会完成一定的功能,比如说浏览器帮我们打开网页,为了保证其独立性,就需要一个专门的管理和控制执行程序的数据结构——进程控制块. 进程就是一个程序在一个数据集上的一次动态执行过程. 进程一般由程序.数据集.进程控

python之logging模块的使用

python的logging模块是用来写日志的,是python的标准模块. logging的结构 查看logging的python源码,可知主要有四个类实现功能: Loggers:提供应用程序直接使用的接口,如相关的配置设置: Handlers:将Loggers产生的日志传到指定位置,设置日志保存的位置: Filters:对输出日志进行过滤操作: Formatters:控制日志的输出格式: 日志记录的级别 DEBUG:优先级10,记录调试的详细信息,只在调试时开启: INFO:优先级20,记录普

python进程、多进程

进程: 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体:在当代面向线程设计的计算机结构中,进程是线程的容器.程序是指令.数据及其组织形式的描述,进程是程序的实体.. 狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed). 广义定义:进程是一个具有一定独立功能的

Python基础31_multiprocess模块.锁.队列

一. multiprocess模块 仔细说来,multiprocess不是一个模块而是python中一个操作.管理进程的包. 之所以叫multi是取自multiple的多功能的意思,在这个包中几乎包含了和进程有关的所有子模块.由于提供的子模块非常多,为了方便大家归类记忆,我将这部分大致分为四个部分:创建进程部分,进程同步部分,进程池部分,进程之间数据共享.重点强调:进程没有任何共享状态,进程修改的数据,改动仅限于该进程内,但是通过一些特殊的方法,可以实现进程之间数据的共享. 1. Process