进程:(参考文章)https://blog.csdn.net/u014556057/article/details/61616902
- 进程类 代码,可做模板
from multiprocessing import Process,Pool
import os
import time
class Myprocess(Process):
def __init__(self,wTime):
Process.__init__(self)
self.wTime = wTime
def run(self):
n = 0
while n<3:
print('子进程{}正在运行'.format(os.getpid())),'{}'.format(time.ctime())
time.sleep(self.wTime)
n +=1
if __name__ == '__main__':
p = Myprocess(2)
p.daemon = True # 守护进程(其父进程结束,子进程也直接终止运行)
p.start()
p.join() #它使子进程执行结束后,父进程才执行之后的代码
print('正在运行的进程',p.pid)
print('进程结束,{}'.format(time.ctime()))
- 进程池Pool
from multiprocessing import Process,Pool
import os,time
def run_proc(name):
for i in range(5):
time.sleep(0.2)
print('运行子进程{}({})'.format(name,os.getpid()))
if __name__ == '__main__':
# os.getpid()获取当前进程id os.getppid()获取父进程id
print('运行主进程{}'.format(os.getpid()))
mainStart = time.time()
p = Pool(8)
for i in range(16):
p.apply_async(run_proc,args=('Process'+str(i),))
print('等待所有进程执行完')
p.close()
p.join()
print('所有进程已经执行完毕')
mainEnd = time.time()
print('所有进程执行的总时间是{}'.format(mainEnd-mainStart))
附加说明:这里进程池对并发进程的限制数量为8个,而程序运行时会产生16个进程,进程池将自动管理系统内进程的并发数量,其余进程将会在队列中等待。限制并发数量是因为,系统中并发的进程不是越多越好,并发进程太多,可能使CPU大部分的时间用于进程调度,而不是执行有效的计算。
采用多进程并发技术时,就单个处理机而言,其对进程的执行是串行的。但具体某个时刻哪个进程获得CPU资源而执行是不可预知的(如执行结果的开头部分,各进程的执行顺序不定),这就体现了进程的异步性。
如果单个程序执行14次run_proc函数,那么它会需要至少16秒,通过进程的并发,这里只需要2.49秒,可见并发的优势。
待续。。。