Multiprocess里的Pool原理的理解

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("Parent process %s" % os.getpid())#获取父进程的ID
    p = Pool(4)#同时进行的进程数 可以设置 默认为cpu的核数
    for i in range(5):
        p.apply_async(long_time_task, args=(i,))#因为p的进程数为4,则同时开4个进程立刻进行long_time_task这个函数,同时出四个结果
        #等四个中的一个子进程先结束,再进下一个子进程task4
    print("Waiting for all subprocesses done...")
    p.close()#调用close后不能添加新的进程
    p.join()#子进程结束
    print("All subprocesses done.")

结果:

Parent process 10720
Waiting for all subprocesses done...
Run task 0(112)...
Run task 1(11284)...
Run task 2(3840)...
Run task 3(8624)...
Task 1 runs 1.03 seconds.
Run task 4(11284)...
Task 0 runs 1.30 seconds.
Task 3 runs 1.36 seconds.
Task 4 runs 0.96 seconds.
Task 2 runs 2.88 seconds.
All subprocesses done.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值