Python 101-创建多个进程

11 篇文章 0 订阅
3 篇文章 0 订阅

大多数CPU制造商现在都在开发多核CPU。甚至连手机都有多个核心!Python线程不能使用这些内核,因为全局解释器锁。从Python2.6开始,multiprocessing模块被添加,让您充分利用您的机器上的所有核心。

大多数 CPU 制造商正在创建多核 CPU 现在。即使是手机也有多个核心!线程不能使用这些内核,因为有 GIL。从 Python 2.6开始,增加了多处理模块,使您可以充分利用机器上的所有核心。

在本文中,您将了解以下主题:

在本文中,您将了解以下主题:

使用过程的优点 使用程序的优点
使用过程的缺点 使用过程的缺点
使用 创建流程multiprocessing
子类Process
创建进程池 创建过程池
本文并不是对多处理的一个全面的概述。一般情况下,多处理和并发这一主题将更适合于自己的一本书。您可以始终查看multiprocessing模块(如果需要的话):

本文不是对多处理的全面概述。一般来说,多处理和并发的主题更适合放在它自己的书中。如果你需要,你可以在这里查看多处理模块的文档:

Https://docs.python.org/2/library/multiprocessing.html
现在,我们开始吧!

现在,我们开始吧!

使用过程的优点
使用程序的优点
使用过程有几个优点:

使用流程有以下几点好处:

进程使用单独的内存空间 进程使用单独的内存空间
与线程相比,代码可以更直接地向前移动。 与线程相比,代码可以更加直接
使用多个CPU/核心 使用多个 cpu/核心
避免全局解释器锁定(GIL) 避免使用 GIL
子进程可以被终止(与线程不同) 子进程可以被杀死(与线程不同)
这个 这个multiprocessing模块的接口类似于 模块有一个接口类似于threading.Thread
适用于cpu限制处理(加密、二进制搜索、矩阵乘法)。 适用于与 cpu 有关的处理(加密、二进制搜索、矩阵乘法)
现在让我们来看看进程的一些缺点!

现在让我们来看看进程的一些缺点!

使用过程的缺点
使用过程的缺点
使用进程也有几个缺点:

使用过程还有一些缺点:

进程间通信更为复杂。 进程间通信更加复杂
内存占用比线程大 内存占用大于线程
现在,让我们学习如何使用Python创建一个进程!

现在让我们学习如何使用 Python 创建进程!

使用multiprocessing
使用多处理创建进程
这个multiprocessing模块的设计是为了模拟threading.Thread上过课。

多处理模块用于模拟线程. 线程类的工作方式。

下面是使用multiprocessing模块:

下面是一个使用多处理模块的例子:在这里插入图片描述
第一步是导入multiprocessing模块。另外两个进口是为random和time模块分别。

第一步是导入多处理模块。另外两个导入分别用于随机模块和时间模块。

那你就有傻了worker()假装做一些工作的函数。它吸收了一个name什么都不回。内部worker()函数,它将打印出name然后它将使用time.sleep()来模拟一些长时间运行的过程。最后,它将打印出来,它已经完成。

然后你有一个愚蠢的工人()函数,假装做一些工作。它只接受一个名字,不返回任何东西。在 worker ()函数内部,它将打印出 worker 的名称,然后使用 time.sleep ()模拟执行某个长时间运行的进程。最后,它会打印出它已经完成了。

代码片段的最后一部分是创建5个工作进程的地方。你用multiprocessing.Process(),它的工作方式与threading.Thread()做。你告诉我Process要使用的目标函数和传递给它的参数。主要区别在于,这一次您将创建一个list过程。对于每个进程,您可以调用它的start()方法来启动进程。

The last part of the code snippet is where the five worker processes are created. You used multiprocessing. Process () , which works in the same way as threading. The Thread will do it. You tell me the object function that Process is going to use and the parameters passed to it. The main difference is that this time you will create a list procedure. For each process, you can call its start () method to start the process.

最后,循环处理进程列表,并调用其join()方法,它告诉Python等待进程终止。

运行此代码时,您将看到类似于以下内容的输出:
在这里插入图片描述
每次运行脚本时,输出都会有所不同,因为random模块。你自己试试看吧!
子类Process
SUBCLASS Process
这个Process类的multiprocessing模块也可以被子类化。它的工作方式与threading.Thread班上有。

The multiprocessing module of the Process class can also be subclassed. It works with threading. There’s one in the Thread class.

让我们看看:
在这里插入图片描述
在这里,你的子类multiprocess.Process()并覆盖其run()方法。

Here, your subclass multiprocess. Process () and override its run () method.

接下来,在代码末尾创建循环中的进程,并将其添加到进程列表中。然后,要使进程正常工作,需要循环处理进程列表并调用join()每个人身上。这与上一节中的前一个流程示例中的工作原理完全一样。

Next, create the process in the loop at the end of the code and add it to the process list. Then, for the process to work properly, you need to loop through the process list and call join () on everyone. This works exactly as it did in the previous process example in the previous section.

这个类的输出也应该与上一节的输出非常相似。

The output from this class should also be very similar to the output from the previous section.

创建进程池
Create a process pool
如果您有很多进程要运行,有时您会希望限制可以同时运行的进程的数量。例如,假设您需要运行20个进程,但是您有一个只有4个内核的处理器。您可以使用multiprocessing模块来创建一个进程池,将每次运行的进程数量限制为4个。
你可以这样做:
在这里插入图片描述
在本例中,您有相同的worker()功能。代码的真正内容是在最后使用列表理解创建15个进程名。然后创建一个Pool并将一次运行的进程总数设置为5。pool,你需要打电话给map()方法,并将希望调用的函数以及传递给函数的参数传递给它。
Python现在将一次运行5个进程(或更少),直到所有进程都完成为止。你需要打电话terminate()在泳池的最后,你会看到这样的消息:在这里插入图片描述
现在,您知道了如何创建一个过程。Pool用Python!
您现在已经学习了使用multiprocessing模块。你了解了以下情况:

You have now learned to use the multiprocessing module. Here’s what you know:

使用过程的优点 Advantages of using process
使用过程的缺点 Disadvantages of the use process
使用multiprocessing
子类Process
创建进程池 Create a process pool
还有更多的事情要做multiprocessing比这里覆盖的更多。您可以学习如何使用Python的Queue模块从进程中获取输出。这就是进程间交流的主题。还有更多。然而,目标是学习如何创建过程,而不是学习multiprocessing模块。并发性是一个很大的主题,它需要比本文所讨论的内容更深入的讨论。

有用收藏订阅
学习资料私信1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值