如下代码:
from multiprocessing import Pooldef func1(n): print('in func1') return n*ndef 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 Pooldef func1(n): print('in func1') return n*ndef 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 func1in func2100
这回调函数的作用就是将函数func1的返回值传给func2,并执行func2函数,所以不能在pool.apply_async里面单独给func2传值,func2接受的参数就是func1的返回值。
判断func2在子进程还是主进程:
from multiprocessing import Poolimport osdef func1(n): print('in func1', os.getpid()) return n*ndef 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()
打印结果:
主进程: 14688in func1 11928in func2 14688100
func2在主进程里面。
所以回调函数就是回到主进程继续执行。
结束!