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

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

    结束!

  • 相关阅读:
    Spark ML 文本的分类
    Linxu 安装Scala
    Nginx访问非常慢
    mysql:unknown variable 'default-character-set=utf8'
    mysql 1045
    mysql: error while loading shared libraries: libnuma.so
    elasticsearch: can not run elasticsearch as root
    Java中的Class类
    ClassLoader工作机制
    遍历机器查日志
  • 原文地址:https://www.cnblogs.com/aaronthon/p/9846338.html
Copyright © 2011-2022 走看看