Python之进程的玩法

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的父进程,默认状态下会等待子进程完成后,才会结束,这样也可以保证子进程不变成孤儿进程。

下一篇我们再讨论进程的一些函数具体功能,和进程对于数据拷贝的细节

你可能感兴趣的:(Python,3.6)