Python3.x:multiprocessing module多进程

已经知道了Python的多线程是假的多线程,无论你的电脑几核,在同一时刻只会运行一个线程,但是,多进程是真的多进程啊,假如你的电脑八核的,你开启了8个进程,而每个进程又至少有一个线程,这个时候你就会发现,你的CPU会被高效的利用起来,达到真正的同时处理,但是线程跟进程是不一样的,即便你充分利用了CPU,但是线程中的一些功能进程是办不到的,比如进程间数据不共享等等,具体请戳Python3.x:线程与进程理解

无论如何,进程也是我们以后会经常使用的,让我们来看下进程的使用吧

进程的使用方法跟线程基本相似,如果看过之前的线程,那么这个学起来会相当的简单

from multiprocessing import Process
import threading


# def run2():
#     while True:
#         pass

# run方法进入死循环
def run():
    while True:
        # t = threading.Thread(target=run2)
        # t.start()
        pass


if __name__ == '__main__':
    # 开启三个进程
    for i in range(3):
        p = Process(target=run)
        p.start()

让我们看一看效果:



在程序运行的时候我们可以看到,瞬间CPU负载达到了75左右,三个进程,占用了4分之3的CPU,有时候自己也会觉得神奇,就这样几行代码,自己实现了多核共同运行,甚至按自己想要的方式运行

这里语法就不多做解释了,学了进程有很多相似的地方,接下来看一下如何取到我们所开启进程的进程号,以及了解一下进程与进程间关系

import multiprocessing
import os


def info(title):
    print(title)
    print('父进程id:', os.getppid())
    print('我的id:', os.getpid())


# if __name__ == '__main__':
#     # for i in range(4):
#     p = multiprocessing.Process(target=info, args=('进程', ))
#     p.start()

info('111')

接下来仔细看,观察一个有趣的现象:




可以看到,我们还没有开启多进程,但是却存在父进程,而这个父进程是谁呢?我找了找发现是他:Pycharm,看来,是Pycharm创建了这个进程,这里要说一句,在Linux中,每一个进程都是由父进程创建的

接下来试下在主程序中再开一个进程:

import multiprocessing
import os


def info(title):
    print(title)
    print('父进程id:', os.getppid())
    print('我的id:', os.getpid())


if __name__ == '__main__':
    info('1')
    p = multiprocessing.Process(target=info, args=('2', ))
    p.start()

很明显,主进程的父进程是Pycharm,而另外开的一条进程的父进程是主进程,也就是说,这个程序中的进程都是由另一个进程启动的,也许是主进程,也许不是,但是,总有启动它的一个进程

转载请注明出处

python自学技术互助扣扣群:670402334

你可能感兴趣的:(Python3.x:multiprocessing module多进程)