如下代码:
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在主进程里面。
所以回调函数就是回到主进程继续执行。
结束!
本文深入探讨了Python中使用multiprocessing模块进行多进程处理时,如何利用回调函数接收并处理子进程返回的数据。通过实例展示了回调函数func2如何接收并打印func1的返回值,揭示了回调函数在主进程中执行的特性。
8860

被折叠的 条评论
为什么被折叠?



