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----------')
结果: