码迷,mamicode.com
首页 > 系统相关 > 详细

多进程

时间:2015-02-25 17:03:13      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

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

  



多进程

标签:

原文地址:http://www.cnblogs.com/Citizen/p/4299783.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!