将进程定义成类
通过继承Process类,来自定义进程类,实现run方法 。实例p通过调用p.start()时自动调用run方法 。
如下:
# -*- coding:utf-8 -*-from multiprocessing import Process, Poolimport osimport timeclass Myprocess(Process):
def __init__(self, wTime):
Process.__init__(self)
self.wTime = wTimedef run(self):
n = 0
while n3:print "subProcess %s run," % os.getpid(), "{0}".format(time.ctime())
time.sleep(self.wTime)
n += 1if __name__ == "__main__":
p = Myprocess(2)
p.daemon = True
p.start()#自动调用run方法
p.join()print "Parent process run. subProcess is ", p.pidprint "Parent process end,{0}".format(time.ctime())12345678910111213141516171819202122232425262728
执行结果和上一个例子相同 。
创建多个进程
很多时候系统都需要创建多个进程以提高CPU的利用率,当数量较少时,可以手动生成一个个Process实例 。当进程数量很多时 , 或许可以利用循环,但是这需要程序员手动管理系统中并发进程的数量 , 有时会很麻烦 。这时进程池Pool就可以发挥其功效了 。可以通过传递参数限制并发进程的数量,默认值为CPU的核数 。
直接上例子:
# -*- coding:utf-8 -*-from multiprocessing import Process,Poolimport os,timedef run_proc(name):##定义一个函数用于进程调用
for i in range(5):
time.sleep(0.2)#休眠0.2秒
print 'Run child process %s (%s)' % (name, os.getpid())#执行一次该函数共需1秒的时间if __name__ =='__main__': #执行主进程
print 'Run the main process (%s).' % (os.getpid())
mainStart = time.time() #记录主进程开始的时间
p = Pool(8)#开辟进程池
for i in range(16):#开辟14个进程
p.apply_async(run_proc,args=('Process'+str(i),))#每个进程都调用run_proc函数,
#args表示给该函数传递的参数 。
print 'Waiting for all subprocesses done ...'
p.close() #关闭进程池
p.join()#等待开辟的所有进程执行完后,主进程才继续往下执行
print 'All subprocesses done'
mainEnd = time.time()#记录主进程结束时间
print 'All process ran %0.2f seconds.' % (mainEnd-mainStart)#主进程执行时间123456789101112131415161718192021222324
执行结果:
开头部分
Run the main process (30920).
Waiting for all subprocesses done …
Run child process Process0 (32396)
Run child process Process3 (25392)
Run child process Process1 (28732)
Run child process Process2 (32436)
末尾部分:
Run child process Process15 (25880)
All subprocesses done
All process last 2.49 seconds.
相关说明:
这里进程池对并发进程的限制数量为8个 , 而程序运行时会产生16个进程 , 进程池将自动管理系统内进程的并发数量,其余进程将会在队列中等待 。限制并发数量是因为,系统中并发的进程不是越多越好 , 并发进程太多,可能使CPU大部分的时间用于进程调度,而不是执行有效的计算 。
采用多进程并发技术时,就单个处理机而言,其对进程的执行是串行的 。但具体某个时刻哪个进程获得CPU资源而执行是不可预知的(如执行结果的开头部分,各进程的执行顺序不定),这就体现了进程的异步性 。
如果单个程序执行14次run_proc函数,那么它会需要至少16秒,通过进程的并发,这里只需要2.49秒,可见并发的优势 。
python启动进程函数的介绍就聊到这里吧 , 感谢你花时间阅读本站内容,更多关于python启动进程并获取pid、python启动进程函数的信息别忘了在本站进行查找喔 。
推荐阅读
- 你若安好便是晴天案例HTML5代码,你若安好便是晴天动图
- 铁路旅游如何利用新媒体,铁路新媒体的发展方向和趋势
- GIS辅助触点开断能力,辅助触点km连接方法
- 抖音中直播推荐界面在哪,抖音直播推荐在哪打开
- php前台数据展示的方法 php实时显示数据
- 为什么用核显CPU占用高,为什么用核显cpu占用高了
- 变装视频用什么,变装视频用什么软件
- 新媒体数据如何转化,新媒体数据如何转化到新媒体
- vb.net粘贴报错 vba运行后粘贴功能没用了