對應示例代碼,回調函數不會阻塞
import time from concurrent.futures import ThreadPoolExecutor def get(delay): print('delay {}s'.format(delay)) time.sleep(delay) # 延時 return {'delay': delay+5} # 返回結果 def parse(res): res = res.result() # !取到res結果 【回調函數】帶參數需要這樣 print('res is {}' .format (res['delay'])) if __name__ == '__main__': time_delay = [1,3,2] pool = ThreadPoolExecutor(len(time_delay)) for i in time_delay: pool.submit(get, i).add_done_callback(parse) # 【回調函數】執行完線程后,跟一個函數 print("hello")
通過以下結果可以發現,並沒有阻塞主線程,只是當線程運行完成之后,就會調用parse。
輸出結果:
delay 1s delay 3s delay 2s hello res is 6 res is 7 res is 8