python 进程池

296 阅读1分钟
import multiprocessing
import time
import random
import os


def worker(msg):
    t_start = time.time()
    print("%s开始执行,进程号为%d" % (msg,os.getpid()))
    # random.random()随机生成0~1之间的浮点数
    time.sleep(random.random()*2)
    t_stop = time.time()
    print(msg,"执行完毕,耗时%0.2f" % (t_stop-t_start))


if __name__ == '__main__':
    # 1 创建进程池
    pool = multiprocessing.Pool(3)

    # 2 添加任务 ---> 两种
    # apply添加任务的方式  阻塞的任务添加方式 任务添加到进程池中的进程中执行 
    # 会阻塞等待任务执行完成 才会继续往下执行
    pool.apply(func=worker, args=('000',))
    pool.apply(func=worker, args=('111',))

    # 非阻塞的任务添加方式  把任务添加到进程中执行 不阻塞等待任务执行完成
    pool.apply_async(func=worker, args=('222',))
    pool.apply_async(func=worker, args=('333',))
    # 主进程一旦退出 就会导致所有的任务《子进程 不是通过继承的方式创建出来的》全部结束 

    # 3 关闭进程池-不再允许添加任务
    # pool.close()

    # 3 直接终止所有正在运行的子进程
    pool.terminate()

    # 4 等待所有任务执行完成
    pool.join()