回调函数 call_back

"""call_back 
回调函数就是(我给你电话,你忙完你的,按照号码打回来)
obj.add_done_callback(func)
对象.打电话给我(留的联系方式)
回调函数: 把函数当成参数传递给另外一个函数 在当前函数执行完毕之后,调用一下传递进来的函数,该函数是回调函数
""" from concurrent.futures import ThreadPoolExecutor from threading import currentThread as cthread import time,os # (1) 线程池,它的回调函数 由子线程完成 """ (1)add_done_callback 在获取当前线程的返回值的时候,可以异步并发,加快速度 (2)回调函数由谁执行:由执行任务的当前子线程,调用回调函数 """ lst = [] def func(i): print("thread",i,cthread().ident) time.sleep(0.1) print("thread %s end" % (i)) return "*" * i # 回调函数 def call_back(obj): print("<==start==>") print("call_back:",cthread().ident) print(obj) print(obj.result()) print("<==end==>") tp = ThreadPoolExecutor(5) for i in range(1,11): obj = tp.submit(func,i) # 使用回调函数,异步并发 obj.add_done_callback(call_back) # print(obj) # lst.append(obj) # 打印返回值 for i in lst: print(i.result()) # print("主线程执行结束.. end",cthread().ident) # 代码解析: class MyClass(): def add_done_callback(self,func): # code1 code2 code3.... """ self <==> obj func <==> call_back """ # 最后func func(self) def call_back(args): # args <==> obj print("call_back:",cthread().ident) print(args) print(args.result()) obj = MyClass() obj.add_done_callback(call_back) # (2) 进程池,它的回调函数 由主进程完成 """ (1)add_done_callback 在获取当前进程的返回值的时候,可以异步并发,加快速度 (2)回调函数由谁执行:都由主进程来完成 """ from concurrent.futures import ProcessPoolExecutor def func(i): print("Process",i,os.getpid()) time.sleep(0.1) print("Process %s end" % (i)) return "*" * i def call_back(obj): print("call_back:",os.getpid()) print(obj.result()) if __name__ == "__main__": p = ProcessPoolExecutor(5) for i in range(1,11): obj = p.submit(func,i) # print(obj.result()) obj.add_done_callback(call_back) print("主进程执行结束.." , os.getpid())
原文地址:https://www.cnblogs.com/max404/p/11885466.html