美文网首页
Python3.x:multiprocessing module

Python3.x:multiprocessing module

作者: james_chang | 来源:发表于2018-03-20 11:50 被阅读0次

    已经知道了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

          本文链接:https://www.haomeiwen.com/subject/xiuvqftx.html