zoukankan      html  css  js  c++  java
  • 进程池的回调函数callback

    如下代码:

    from multiprocessing import Pool
    
    
    def func1(n):
        print('in func1')
        return n*n
    
    
    def func2(nn):
        print('in func2')
        print(nn)
    
    
    if __name__ == "__main__":
        pool = Pool(5)
        pool.apply_async(func1, args=(10,))
        pool.close()
        pool.join()

    结果是 in func1

    这是通过回调函数就可以执行func2了:

    from multiprocessing import Pool
    
    
    def func1(n):
        print('in func1')
        return n*n
    
    
    def func2(nn):
        print('in func2')
        print(nn)
    
    
    if __name__ == "__main__":
        pool = Pool(5)
        pool.apply_async(func1, args=(10,), callback=func2)
        pool.close()
        pool.join()

    打印结果:

    in func1
    in func2
    100

    这回调函数的作用就是将函数func1的返回值传给func2,并执行func2函数,所以不能在pool.apply_async里面单独给func2传值,func2接受的参数就是func1的返回值。

    判断func2在子进程还是主进程:

    from multiprocessing import Pool
    import os
    
    def func1(n):
        print('in func1', os.getpid())
        return n*n
    
    
    def func2(nn):
        print('in func2', os.getpid())
        print(nn)
    
    
    if __name__ == "__main__":
        print('主进程:', os.getpid())
        pool = Pool(5)
        pool.apply_async(func1, args=(10,), callback=func2)
        pool.close()
        pool.join()

    打印结果:

    主进程: 14688
    in func1 11928
    in func2 14688
    100

    func2在主进程里面。

    所以回调函数就是回到主进程继续执行。

    结束!

  • 相关阅读:
    C编程规范
    c# 闭包 小例
    计算前后2行的时间差
    判断是不是奇数
    条件表达式工具类
    代码重构-5 取消类的私有变量(实例变量)
    代码重构-4 通用方法 用 static
    代码重构-3 用Tuple代替 out与ref
    代码重构-2 简单不变的 if else 用字典代替
    代码重构-1 对参数中有 bool值的拆分
  • 原文地址:https://www.cnblogs.com/aaronthon/p/9846338.html
Copyright © 2011-2022 走看看