2020年5月30日 / 53次阅读 / 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条留言
前一篇:多进程(multiprocessing)
后一篇:python的复数运算
Ctrl+D 收藏本页
©Copyright 麦新杰 Since 2019 Python笔记
【一个想法】控制台程序的打印输出,通过多进程导入到一个浮动的window log窗口,这个window log窗口在一个独立的进程内!我觉得这是简化了设计,不要去折腾在一个线程中创建root窗口和多个Toplevel窗口这样的事情,很多容易出错的细节。这样简单一些,一个进程一个root,而且确保root在main thread中运行。 [ ]