Python多进程实现方法

2020年5月30日 / 27次阅读 / Last Modified 2020年5月30日
多进程

本文介绍如何通过python的multiprocessing模块创建多进程的计算模型。

from multiprocessing import  Process
import time
import random


def fun1(i):
    time.sleep(random.randint(0,2))
    print('multiprocess test %d' %i)


if __name__ == '__main__':
    process_list = []
    for i in range(5):  #开启5个子进程执行fun1函数
        p = Process(target=fun1,args=(i,)) #实例化进程对象
        p.start()
        process_list.append(p)

    for p in process_list:
        p.join()

    print('Done!')
    

通过multiprocessing模块的Process创建进程对象,然后start。join用来阻塞等待进程执行结束。接口基本与多线程一致。

多进程的入口也就是一个普普通通的函数!但是它是以独立进程的方式运行。

以上代码执行效果:

D:\py>python mptest.py
multiprocess test 1
multiprocess test 4
multiprocess test 0
multiprocess test 2
multiprocess test 3
Done!

D:\py>python mptest.py
multiprocess test 0
multiprocess test 2
multiprocess test 3
multiprocess test 1
multiprocess test 4
Done!

下面是用继承的方法创建进程:

from multiprocessing import  Process
import time
import random


class MyProcess(Process): #继承Process类
    def __init__(self,name):
        super(MyProcess,self).__init__()
        self.name = name

    def run(self):
        time.sleep(random.randint(0,2))
        print('测试多进程 %s' % self.name)


if __name__ == '__main__':
    process_list = []
    for i in range(5):  #开启5个子进程执行fun1函数
        p = MyProcess(str(i)*8) #实例化进程对象
        p.start()
        process_list.append(p)

    for p in process_list:
        p.join()

    print('Done!')

如下是执行效果:

D:\py>python mptest.py
测试多进程 11111111
测试多进程 33333333
测试多进程 00000000
测试多进程 22222222
测试多进程 44444444
Done!

D:\py>python mptest.py
测试多进程 22222222
测试多进程 11111111
测试多进程 44444444
测试多进程 00000000
测试多进程 33333333
Done!

创建多进程时,也有daemon参数,含义与多线程的一样。

-- EOF --

本文链接:https://www.pynote.net/archives/2018

留言区

《Python多进程实现方法》有1条留言

电子邮件地址不会被公开。 必填项已用*标注

  • 麦新杰

    【一个想法】控制台程序的打印输出,通过多进程导入到一个浮动的window log窗口,这个window log窗口在一个独立的进程内!我觉得这是简化了设计,不要去折腾在一个线程中创建root窗口和多个Toplevel窗口这样的事情,很多容易出错的细节。这样简单一些,一个进程一个root,而且确保root在main thread中运行。 [回复]


前一篇:
后一篇:

More


©Copyright 麦新杰 Since 2019 Python笔记

go to top