python踩的坑(持續更新)

0x01 多線程不生效

使用ThreadPoolExecutor線程池,並使用submit提交調用函數
開始調用寫法

from concurrent.futures import ThreadPoolExecutor
from concurrent import futures

pool = ThreadPoolExecutor(20)
result = pool.submit(test, arg1).result

簡單說下兩句的用法,第一句是設置線程池最大線程數爲20,第二句是多線程調用函數test,並且test函數有個參數是arg1,.result是獲取函數調用以後得返回結果,這樣調用的一個問題是提交以後會等到有結果以後纔會重新創建一個線程
正確的用法

from concurrent.futures import ThreadPoolExecutor
from concurrent import futures

pool = ThreadPoolExecutor(20)
task = pool.submit(test, arg1)
        tread.append(task)
    for t in futures.as_completed(tread):
        try:
            result = t.result()
        except Exception as e:
            print("線程執行錯誤:{}".format(e))

使用as_completed()函數判斷線程是否執行完成,然後再獲取result

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章