【Multiprocessing系列】Process

  利用multiprocessing.Process对象可以创建一个进程,该Process对象与Thread对象的用法相同,也有start(), run(), join()等方法。Process类适合简单的进程创建,如需资源共享可以结合multiprocessing.Queue使用;如果想要控制进程数量,则建议使用进程池Pool类。

Process介绍

构造方法:
  • Process([group [, target [, name [, args [, kwargs]]]]])
  • group: 线程组,目前还没有实现,库引用中提示必须是None;
  • target: 要执行的方法;
  • name: 进程名;
  • args/kwargs: 要传入方法的参数。
实例方法:
  • is_alive():返回进程是否在运行。
  • join([timeout]):阻塞当前上下文环境的进程程,直到调用此方法的进程终止或到达指定的timeout(可选参数)。
  • start():进程准备就绪,等待CPU调度。
  • run():strat()调用run方法,如果实例进程时未制定传入target,这star执行t默认run()方法。
  • terminate():不管任务是否完成,立即停止工作进程。
属性:
  • authkey
  • daemon:和线程的setDeamon功能一样(将父进程设置为守护进程,当父进程结束时,子进程也结束)。
  • exitcode(进程在运行时为None、如果为–N,表示被信号N结束)。
  • name:进程名字。
  • pid:进程号。

创建多进程的两种方法

Process类中,可以使用两种方法创建子进程。

使用Process创建子进程

说明:用法与Threading相似

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from multiprocessing import Process #导入Process模块
import os
def test(name):
'''
函数输出当前进程ID,以及其父进程ID。
此代码应在Linux下运行,因为windows下os模块不支持getppid()
'''
print "Process ID: %s" % (os.getpid())
print "Parent Process ID: %s" % (os.getppid())
if __name__ == "__main__":
'''
windows下,创建进程的代码一下要放在main函数里面
'''
proc = Process(target=test, args=('nmask',))
proc.start()
proc.join()
使用Process类继承创建子进程

说明:通过继承Process类,修改run函数代码。

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
from multiprocessing import Process
import time
class MyProcess(Process):
'''
继承Process类,类似threading.Thread
'''
def __init__(self, arg):
super(MyProcess, self).__init__()
#multiprocessing.Process.__init__(self)
self.arg = arg
def run(self):
'''
重构run函数
'''
print 'nMask', self.arg
time.sleep(1)
if __name__ == '__main__':
for i in range(10):
p = MyProcess(i)
p.start()
for i in range(10):
p.join()

传送门

【Multiprocessing系列】共享资源
【Multiprocessing系列】子进程返回值
【Multiprocessing系列】Pool
【Multiprocessing系列】Process
【Multiprocessing系列】Multiprocessing基础

本文标题:【Multiprocessing系列】Process

文章作者:nMask

发布时间:2016年11月24日 - 09:11

最后更新:2017年07月25日 - 20:07

原始链接:http://thief.one/2016/11/24/Multiprocessing-Process/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

nMask wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
坚持原创技术分享,您的支持将鼓励我继续创作!