进程池

# 进程池 内部维护一个进程序列,当使用时,则去进程池获取一个进程,如果进程池序列没有可供使用的进程,那么程序就等待,直到进程池中有可用进程为止。
# 进程池中有两个方法 apply表示同步方法 apply_async表示异步方法
from multiprocessing import Pool
import time, os


def foo(i):
    time.sleep(1)
    print(i)
    return i + 100


def bar(arg):
    print(os.getpid())
    print(os.getppid())
    print('logger:', arg)
    pass


if __name__ == '__main__':

    pool = Pool(5)  # 创建进程池对象,最大进程数为5,如果不写5,则默认为电脑的实际核心数
    print('main process:', os.getpid())
    bar(1)
    print('-' * 30)

    for i in range(100):  # 开100个任务
        pool.apply_async(func=foo, args=(i,),
                         callback=bar)  # 用进程池里的最大量(5),来跑这100个任务,callback表示回调函数(某个动作或函数执行成功后再去执行的函数)
        # pool.apply(func=foo, args=(i,))     # 同步方式,一次只能一个进程,不管你进程池里设置的是多少

    pool.close()
    pool.join()  # 在进程池中join要放在close的后面
    print('end')

 

posted @ 2018-08-19 00:29  四十不惑的编程之路  阅读(131)  评论(0编辑  收藏  举报