fork,Process,Pool的比较

xiaoxiao2021-02-27  194

1.os.fork():主进程执行完退出,不会等待子进程。子进程不会随着主进程结束,继续运行。

2.Process():主进程会等待子进程结束后,在结束整个程序。

3.Pool():主进程不会等待子进程,主进程结束后,整个程序都结束。可创建多个进程。

例:fork

import os,time num = 0 pid = os.fork() if pid == 0: time.sleep(2) num +=1 print('1子进程pid是%s....父进程的pid是:%s,num=%s'%(os.getpid(),os.getppid(),num)) else: num +=1 print('1我是父进程,我的pid是%s....我的子进程的pid是%s,num=%s'%(os.getpid(),pid,num)) 结果:

例:Process

import os import time from multiprocessing import Process def run_proc(): print('子进程运行中,pid=%s'%(os.getpid())) def test1(): print('父进程,pid=%s'%(os.getpid())) p = Process(target=run_proc) p.start() #p.join() #join()等待子进程结束后再继续往下运行,通常用于进程间的同步 print('父进程end...') if __name__ == '__main__': # test2() test1()结果:

例:Pool

from multiprocessing import Pool import os,time,random def worker(msg): start_time = time.time() print("%s开始执行,进程号为%d"%(msg,os.getpid())) time.sleep(random.random()) print("%s执行完毕。"%msg) if __name__ == '__main__': pool = Pool(10) for i in range(1,11): # apply_async:异步 pool.apply_async(worker,(i,)) #apply:同步 # pool.apply(worker,(i,)) print('------start-------') pool.close() # pool.join()#在进程池中,程序不会等待进程池执行完才结束。 time.sleep(0.1) print('--------end----------')结果:

转载请注明原文地址: https://www.6miu.com/read-13739.html

最新回复(0)