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.

猜你喜欢

转载自blog.csdn.net/u014248032/article/details/80703060