多进程

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个进程。

  



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。