fork,Process,Pool的比较

本文介绍了Python中三种不同的多进程实现方式:os.fork()、multiprocessing.Process() 和 multiprocessing.Pool()。通过具体示例展示了每种方式的特点:os.fork() 主进程退出不等待子进程;Process() 则会等待子进程结束;而 Pool() 可创建多个子进程且主进程不会等待所有子进程完成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值