Python Process的简单教程
Python的进程只用还是很简单的,不过也有几点与其他语言不一样。这里,做一个总结类型的笔记。
第一篇,只是简单介绍使用方法,不会详解进程间的通信
一、 简单的使用方法
这里先简单说下进程,进程不严谨的说,就是一个应用层程序的最小单位。cpu的调度对象其实就是进程,这里提一句,为什么线程不是,我的理解是:线程并不是完全独立。
Python的进程包
multiprocessing
绝大部分功能都是从这里面找到,废话不多说,看代码
from multiprocessing import Process
import os, time
def func_1():
print('this is func_1\'s pid:{}'.format(os.getpid()))
print('func_1\'s parent pid:{}'.format(os.getppid())) # 获取父进程id
# 在Windows下这是必须的
if __name__ == '__main__':
print('Main Process pid:{}'.format(os.getpid())) # 获取进程id
# 开启进程方式一
p = Process(target=func_1) # 创建
p.start() # 开启
time.sleep(1)
print('Child Process pid:{}'.format(p.pid))
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Main Process pid: 4084
# this is func_1's pid:9904
# func_1's parent pid:4084
# Child Process pid: 9904
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
生成Process对象的主要参数
class multiprocessing.Process(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)
target:需要调用的进程函数
args:进程函数所需的参数,类型为元组
kwargs:进程函数所需的参数,类型为字典
参数再看下面一个使用参数的例子
def func_2(name, age):
print('{0}\'s age is {1} pid:{2}'.format(name, age, os.getpid()))
print('{0}\'s parent pid:{1}'.format(name, os.getppid()))
# 在Windows下这是必须的
if __name__ == '__main__':
print('Main Process pid:{}'.format(os.getpid()))
# 开启进程方式二 带参数, 参数是个元组,如果只有一个参数需要加逗号 (name,) 不然会被当成单一类型
p = Process(target=func_2, args=('mike',),kwargs={'age':6})
p.start()
time.sleep(1)
print('Child Process pid:{}'.format(p.pid))
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Main Process pid:11388
# mike's age is 6 pid:11252
# mike's parent pid:11388
# Child Process pid:11252
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
当然,python还有一个继承Process类,实现run函数的方式
class MyProcess(Process):
def __init__(self, name):
super().__init__()
self.name = name
def run(self):
print(self.name + '\'s pid:' + str(os.getpid()))
# 在Windows下这是必须的
if __name__ == '__main__':
print('Main Process pid:{}'.format(os.getpid()))
p = MyProcess('mike')
p.start()
print('Child Process pid:{}'.format(p.pid))
使用方法也看了,这一篇就差不多了
还有一句重点就是
python的父进程,默认状态下会等待子进程完成后,才会结束,这样也可以保证子进程不变成孤儿进程。
下一篇我们再讨论进程的一些函数具体功能,和进程对于数据拷贝的细节