Python多处理和concurency与paralellism

时间:2017-10-24 08:22:50

标签: python concurrency parallel-processing multiprocessing

我已经创建并申请了。在这个应用程序中,我使用多处理库。在那个应用程序中,我会旋转两个进程(同一个类的实例)来使用来自Kafka的数据并放入Python Queue。

这是我使用的库: Python multiprocessing

Q1. Is it concurrency or is it parallelism? 
Q2. Is it multithreading or is it multiprocessing? 
Q3. How does Python maps Processes to CPUs? (does this question make sense?)

我理解为了谈论多线程我需要使用单独/多个CPU(因此单独的线程映射到单独的CPU线程)。

我理解为了谈论多处理我需要为这两个进程使用单独的内存空间?这是对的吗?

我假设我在一个Application实例中旋转两个进程=>我们谈论并发。

如果我旋转上述应用程序的多个实例,那么我们会谈论并行性吗? (多个CPU,使用单独的内存空间)?

我看到Python库定义如下:Python multiprocessing library

The multiprocessing package offers both local and remote concurrency

...

Due to this, the multiprocessing module allows the programmer to fully leverage multiple processors on a given machine.

...

A prime example of this is the Pool object which offers a convenient means of parallelizing the execution of a function across multiple input values, distributing the input data across processes (data parallelism).

2 个答案:

答案 0 :(得分:1)

Q1 :它至少是并发性的,也可以是并行性(the answer to this question中定义的术语)。显然,如果你只有一个处理器,那么无法实现真正​​的并行,因为只有一个进程可以一次使用CPU。但是,在这种情况下,muliprocessing库仍允许您定义在不同进程中运行的多个任务。操作系统的调度程序决定何时运行哪个进程。

Q2 :多处理(...这是库名称所暗示的那种)。由于大多数Python解释器实现中存在Global Interpreter Lock,因此无法与线程并行。多处理提供了一个类似线程的界面,可以利用流程下的流程。

Q3 :没有。 Python生成进程,操作系统调度程序决定谁在何时何地运行。有一些方法在特定CPU上执行进程,但这不是multiprocessing的默认行为(我不知道有什么方法可以强制库将进程固定到CPU上)。

答案 1 :(得分:1)

首先,单独的线程不会映射到单独的CPU。这是可选的,并且在python中由于GIL,进程中的所有线程都将在同一个CPU上运行

1)由于多处理程序包可以在多个处理器上运行,绕过GIL限制,因此并发性,因为执行顺序没有设置和并行性。

2)由于线程包是另一个故事,所以它肯定是多处理的

3)我可能会说不通,但是python,IMO不会将进程映射到CPU-s,它会将这些细节留给操作系统