python 使用線程池,回調函數


對應示例代碼,回調函數不會阻塞

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM