在最小的演示示例中,“多处理”的额外好处

时间:2018-06-01 02:41:35

标签: python multiprocessing

我正在学习multiprocessing来自"介绍Python",这是一个展示multiprocessing

的例子
import os
import multiprocessing as mp

def do_this(what):
    whoami(what)

def whoami(what):
    print(f"Process {os.getpid()} says: {what}.")

if __name__ == "__main__":
    whoami("I'm the main program.")
    for i in range(4):
        p = mp.Process(target=do_this, args=(f"I'm function {i}",))
        p.start()

def do_this(what):
    whoami(what)

def whoami(what):
    print(f"Process {os.getpid()} says: {what}.")

if __name__ == "__main__":
    whoami("I'm the main program.")
    for i in range(4):
        do_this(f"I'm function {i}")

运行它并来:

## -- End pasted text --
Process 2197 says: I'm the main program..
Process 2294 says: I'm function 1.
Process 2293 says: I'm function 0.
Process 2295 says: I'm function 2.
Process 2296 says: I'm function 3.

但是,通过一个过程很容易实现:

def do_this(what):
    whoami(what)

def whoami(what):
    print(f"Process {os.getpid()} says: {what}.")

if __name__ == "__main__":
    whoami("I'm the main program.")
    for i in range(4):
        do_this(f"I'm function {i}")
## -- End pasted text --
Process 2197 says: I'm the main program..
Process 2197 says: I'm function 0.
Process 2197 says: I'm function 1.
Process 2197 says: I'm function 2.
Process 2197 says: I'm function 3.

我尽量掌握multiprocessing的想法以及如果没有引入它会解决的问题。

在上述情况下,multiprocessing

的额外好处是什么?

1 个答案:

答案 0 :(得分:2)

multiprocessing背后的想法是,您可以解决需要大量数学运算的问题,并在多个计算系统之间分配工作负载。

这通常在一台计算机上完成,但也可以通过计算机网络完成。对于python a"多进程"在一台计算机上执行。

它的工作方式是现代cpu有几个核心。每个核心都像它自己的处理器,因为它可以一次处理一个线程。

cpu被划分为核心的原因是因为很难使单个核心更快,但是添加更多核心很容易,从而为您提供更多的总处理能力

这个问题是每个核心一次只能执行一个线程。因此,如果您的程序完全是单线程的,那么您所拥有的内核数量并不重要,它只会以它所在的单核速度运行。

像上面那样划分你的python脚本将它分成几个可以在不同核心上独立运行的线程。每个核心都会处理您提供的任务,并将最终答案组合并打印到屏幕上。

在你的例子中,使用多处理确实没有任何好处,因为你没有做大量的工作来减慢程序的速度,但是你说你有大量的数组需要昂贵的数学运算,把这个数组分成零件和将这些零件分配到不同的过程将使整个程序运行得更快。