首页 > 编程 > Python > 正文

python多进程控制学习小结

2020-02-15 23:29:04
字体:
来源:转载
供稿:网友

前言:

python多进程,经常在使用,却没有怎么系统的学习过,官网上面讲得比较细,结合自己的学习,整理记录下官网:https://docs.python.org/3/library/multiprocessing.html

multiprocessing简介

multiprocessing是python自带的多进程模块,可以大批量的生成进程,在服务器为多核CPU时效果更好,类似于threading模块。相对于多线程,多进程由于独享内存空间,更稳定安全,在运维里面做些批量操作时,多进程有更多适用的场景

multiprocessing包提供了本地和远程两种并发操作,有效的避开了使用子进程而不是全局解释锁的线程,因此,multiprocessing可以有效利用到多核处理

Process类

在multiporcessing中,通过Process类对象来批量产生进程,使用start()方法来启动这个进程

1.语法

multiprocessing.Process(group=None,target=None,name=None,args=(),kwargs={},*)

group: 这个参数一般为空,它只是为了兼容threading.Tread target: 这个参数就是通过run()可调用对象的方法,默认为空,表示没有方法被调用 name: 表示进程名 args: 传给target调用方法的tuple(元组)参数 kwargs: 传给target调用方法的dict(字典)参数

2.Process类的方法及对象

run()
该方法是进程的运行过程,可以在子类中重写此方法,一般也很少去重构

start()
启动进程,每个进程对象都必须被该方法调用

join([timeout])
等待进程终止,再往下执行,可以设置超时时间

name
可以获取进程名字,多个进程也可以是相同的名字

is_alive()
返回进程是否还存活,True or False,进程存活是指start()开始到子进程终止

daemon
守护进程的标记,一个布尔值,在start()之后设置该值,表示是否后台运行
注意:如果设置了后台运行,那么后台程序不运行再创建子进程

pid
可以获取进程ID

exitcode
子进程退出时的值,如果进程还没有终止,值将是None,如果是负值,表示子进程被终止

terminate()
终止进程,如果是Windows,则使用terminateprocess(),该方法对已经退出和结束的进程,将不会执行

以下为一个简单的例子:

#-*- coding:utf8 -*- import multiprocessingimport timedef work(x):  time.sleep(1)  print time.ctime(),'这是子进程[{0}]...'.format(x)if __name__ == '__main__':  for i in range(5):    p = multiprocessing.Process(target=work,args=(i,))    print '启动进程数:{0}'.format(i)    p.start()    p.deamon = True

当然也可以显示每个进程的ID

#-*- coding:utf8 -*- import multiprocessingimport timeimport osdef work(x):  time.sleep(1)  ppid = os.getppid()  pid = os.getpid()  print time.ctime(),'这是子进程[{0},父进程:{1},子进程:{2}]...'.format(x,ppid,pid)if __name__ == '__main__':  for i in range(5):    p = multiprocessing.Process(target=work,args=(i,))    print '启动进程数:{0}'.format(i)    p.start()    p.deamon = True            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表