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

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

    结束!

  • 相关阅读:
    让一个不固定高度的div,保持垂直水平居中的方法
    Set、Map、WeakSet 和 WeakMap
    JS 中常用的 Math 方法
    不使用 new,创建一个实例对象
    做一个弹窗
    变量提升
    事件委托实践
    vue组件通信
    新版vue脚手架关闭eslint
    图片懒加载原生js实现
  • 原文地址:https://www.cnblogs.com/aaronthon/p/9846338.html
Copyright © 2011-2022 走看看