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来对其中的进程进行管理,我们可以将这个列表打印出来如下:

[<Process(Process-1, initial)>, <Process(Process-2, initial)>, <Process(Process-3, initial)>, <Process(Process-4, initial)>]

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • //Clojure入门教程: Clojure – Functional Programming for the J...
    葡萄喃喃呓语阅读 9,255评论 0 7
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,120评论 19 139
  • @(python)[笔记] 目录 一、什么是进程 1.1 进程的概念 进程的概念起源于操作系统,是操作系统最核心的...
    CaiGuangyin阅读 5,027评论 0 9
  • 1.进程 1.1多线程的引入 现实生活中 有很多的场景中的事情是同时进行的,比如开车的时候手和脚共同来驾驶汽车,再...
    TENG书阅读 3,935评论 0 0
  • 太阳离开了许久,也许它同上帝一样抛弃了这个腐朽的世界。 ”...是说,我也有一天会变得像他们一样吗。“ 句末的尾音...
    路漫漫修远兮阅读 2,515评论 0 0

友情链接更多精彩内容