python3之进程池(Pool)

函数

apply_async(func[, args[, kwds[, callback]]]) 它是非阻塞,apply(func[, args[, kwds]])是阻塞的(理解区别,看例1例2结果区别)
close()    关闭pool,使其不在接受新的任务。
terminate()    结束工作进程,不在处理未完成的任务。
join()    主进程阻塞,等待子进程的退出, join方法要在close或terminate之后使用。

案例

from multiprocessing import Pool
import time,os

def Foo(i):
    time.sleep(2)
    print("in process",os.getpid())
    return i + 100

def Bar(arg):
    print('-->exec done:', arg,os.getpid())

if __name__ == "__main__":
    # 允许进程池同时放入3个进程
    pool = Pool(3)
    print(os.getppid())
    for i in range(10):
        # 并行,并且当且仅当Foo执行完后再执行Bar
        # 回调应用场景:批量备份完后,往数据库写日志,但是为啥不让子线程写,而让父进程写?因为父进程里写日志只连一次,子进程里每次都连
        # pool.apply_async(func=Foo, args=(i,), callback=Bar)  # callback=回调
        pool.apply_async(func=Foo, args=(i,)) # 并行
        # pool.apply(func=Foo,args=(i,)) # 串行

    print("end")
    # 进程池是先close,后join
    pool.close()
    # 进程池中进程执行完毕后再关闭,如果注释,那么程序直接关闭。.join()
    pool.join()
发布了27 篇原创文章 · 获赞 28 · 访问量 720

猜你喜欢

转载自blog.csdn.net/qq_28286687/article/details/105467010