多进程
1.
import os print ‘Process (%s) start...‘ % os.getpid() pid = os.fork() #生成子进程,在父进程和子进程中运行之后的程序 ,子进程永远返回0
,而父进程返回子进程的ID if pid==0: print ‘I am child process (%s) and my parent is %s.‘ % (os.getpid(), os.getppid()) else: print ‘I (%s) just created a child process (%s).‘ % (os.getpid(), pid)
2.
from multiprocessing import Process import os def run_proc(name): print ‘Run child process %s (%s)...‘ %(name,os.getpid()) if __name__==‘__main__‘: print ‘Parent process %s.‘ %os.getpid() p=Process(target=run_proc,args=(‘test‘,)) print ‘Process will start.‘ p.start() p.join() #子进程运行完毕后继续运行 print ‘Process end.‘
3.
from multiprocessing import Pool import os,time,random def long_time_task(name): print ‘Run task %s (%s)...‘ %(name,os.getpid()) start=time.time() time.sleep(random.random()*3) end=time.time() print ‘Task %s runs %0.2f seconds.‘ %(name,(end-start)) if __name__==‘__main__‘: print ‘Pranet process %s.‘ %os.getpid() p=Pool() ‘‘‘ for i in range(5): p.apply_async(long_time_task,args=(i,)) ‘‘‘ p.apply_async(long_time_task,args=(1,)) p.apply_async(long_time_task,args=(2,)) print ‘Waiting for all subprocesses done...‘ p.close() p.join() print ‘All subprocesses done.‘ 对Pool对象调用join()方法会等待所有子进程执行完毕,调用join()之前必须先调用close(),调用close()之后就不能继续添加新的Process了。 请注意输出的结果,task 0,1,2,3是立刻执行的,而task 4要等待前面某个task完成后才执行,这是因为Pool的默认大小在我的电脑上是4,因此,最多同时执行4个进程。这是Pool有意设计的限制,并不是操作系统的限制。如果改成: p = Pool(5) 就可以同时跑5个进程。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。