Python多进程入门(2Process)

这是第二篇关于多进程的文章,上一篇文章简单介绍了多进程在Python中简单的应用,以一个累加的例子简单说明了主要的应用逻辑,这篇文章里我们简单介绍一下multiprocessing包中的一个重要的一个进程管理工具Process。Process可以用来管理一个进程,比如你想让一个函数运行,这两次同时运行,而不是依次的运行,简单例子如下:

from multiprocessing import Pool,  Process
def f(name):
    """定义一个简单的打印名字的函数"""
    print('hello:', name)


if __name__ == '__main__':
    p1 = Process(target=f, args=('boy',))  # 使用Process建立一个进程
    print("cut")  # 我们在这里打一个断点来看看进程运行的顺序
    p2 = Process(target=f, args=('girl',))  # 使用Process建立第二个进程
    p1.start()  # 开始第一个进程
    p2.start()  # 开始第二个进程
    p1.join()  # 关闭进程
    p2.join()  # 关闭进程
运行结果:
cut
hello: boy
hello: girl

我们根据上面的结果可以看到,每一个进程我们都可以使用Process来进行管理,例子中Process的参数第一个target=f,f代表你要引用函数的函数名称,注意这里时不用添加括号的,不能写成f(),args=("boy",)表示函数需要的参数,要使用元组的形式。
Process的具体参数如下:

Process([group [, target [, name [, args [, kwargs]]]]])
group: 线程组,目前还没有实现,库引用中提示必须是None;
target: 要执行的方法;
name: 进程名;
args: 要传入方法的参数。

另外Process不但有start和join的类方法,还有其他的方法,我们简单介绍如下:

.is_alive():返回进程是否在运行。
.join([timeout]):阻塞当前上下文环境的进程程,直到调用此方法的进程终止或到达指定的timeout(可选参数)。
.start():进程准备就绪,等待CPU调度。
.run():start()调用run方法,如果实例进程时未制定传入target,这start执行默认run()方法。
.terminate():不管任务是否完成,立即停止工作进程

在上面的程序里我们只使用了.start()和.join()两个较为常用的方法。上面的例子中我们只使用了两个进程我们可以一个一个的写,如果一次要写几十个或是上百个进程时还是用这种方式就显得不是很优雅了,我们可以使用for循环来建立我们的进程,先看看代码实现,我再来解释:

from multiprocessing import Pool,  Process


def f(name):
    """定义一个简单的打印名字的函数"""
    print('hello:', name)


if __name__ == '__main__':
    name_list = ["小飞", "小倩", "是不是淘气", "二妞"]
    Process_list = []
    for value in name_list:
        Process_list.append(Process(target=f, args=(value,)))
    for one_process in Process_list:
        one_process.start()
    for one_process in Process_list:
        one_process.join()

运行结果:
hello: 小倩
hello: 小飞
hello: 是不是淘气
hello: 二妞

按照上面的程序,我们使用了三个for循环对四个进程进行统一的管理,进程之间同时运行。我们建立了一个列表name_list用来存放每个进程的输入,建立一个Process_list用来存放我们建立的进程,列表中的每一个元素都是一个进程,后面我们再来遍历这个Process_list来对其中的进程进行管理,我们可以将这个列表打印出来如下:

[, , , ]

看到了列表中都是进程对象,这样我们就一下对多个进程进行了统一的管理。
下一篇文章我们来详细介绍一下Pool的应用,可以接受函数返回值的功能。

你可能感兴趣的:(Python多进程入门(2Process))