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在主进程里面。

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

    结束!

  • 相关阅读:
    mybatis入门-1
    try-with-resources 在捕获异常之后自动释放资源 try(){}
    mybatis配置logback
    使用原生的jdbc连接数据库进行查询
    java中的反射
    ajax实现搜索自动补全
    java IO-1 File 2019-07-24
    VMware历史版本
    Centos8.3-NIS
    用户管理
  • 原文地址:https://www.cnblogs.com/aaronthon/p/9846338.html
Copyright © 2011-2022 走看看