日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python 线程池 ThreadPoolExecutor(一) - Python零基础入门教程

發布時間:2024/9/27 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 线程池 ThreadPoolExecutor(一) - Python零基础入门教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 一.Python 線程池前言
  • 二.Python 線程池原理
  • 三.Python 線程池 ThreadPoolExecutor 函數介紹
  • 四.Python 線程池 ThreadPoolExecutor 簡單使用
  • 五.猜你喜歡

零基礎 Python 學習路線推薦 : Python 學習目錄 >> Python 基礎入門

一.Python 線程池前言

在前面的文章中我們已經介紹了很多關于 Python 線程相關的知識點,比如 線程互斥鎖 Lock / 線程事件 Event / 線程條件變量 Condition 等等,而今天給大家講解的是 線程池 ThreadPoolExecutor,可能很多小伙伴會疑惑,threading 模塊能創建線程,ThreadPoolExecutor 也能創建線程,兩者都有什么區別呢?

眾所周知,程序中使用線程會提高運行效率,雖然線程是計算機的最小單位,但是線程的創建和使用一樣會占用計算機資源和產生開銷,一旦創建成千上萬的線程,計算機一樣會死機!一個合理的程序永遠都是以消耗最少的資源干最多的事,就像公司老板,永遠都想以最少的錢,招最少的人,干最多的事!

哪個二貨在背后說我

二.Python 線程池原理

大家都使用過迅雷下載,當同時下載 1000 個任務甚至更多的時候,就算開通 vip 同時下載的數量也只有 8 個。如果同時創建 1000 個線程,首先對計算器的開銷也很大,而且每次只運行 8 個線程,需要不停的創建和銷毀,這樣會顯得很麻煩。

而使用線程池 ThreadPoolExecutor 就可以解決上面的問題,其實只需要 8 個線程就行了,每個線程各分配一個任務,剩下的任務排隊等待,當某個線程完成了任務的時候,排隊任務就可以安排給這個線程繼續執行,這就是所謂的線程池 ThreadPoolExecutor 原理!

三.Python 線程池 ThreadPoolExecutor 函數介紹

  • 1.ThreadPoolExecutor 構造實例的時候,傳入 max_workers 參數來設置線程池中最多能同時運行的線程數目。
  • 2.使用 submit 函數來提交線程需要執行的任務(函數名和參數)到線程池中,并返回該任務的句柄(類似于文件、畫圖),注意 submit 不是阻塞的,而是立即返回。
  • 3.通過 submit 函數返回的任務句柄,能夠使用 done 方法判斷該任務是否結束。下面的例子可以看出,由于任務有 2s 的延時,在 task1 提交后立刻判斷, task1 還未完成,而在延時 4s 之后判斷,task1 就完成了。
  • 4.使用 cancel 方法可以取消提交的任務,如果任務已經在線程池中運行了,就取消不了。這個例子中,線程池的大小設置為 2 ,任務已經在運行了,所以取消失敗。如果改變線程池的大小為 1 ,那么先提交的是 task1,task2 還在排隊等候,這是時候就可以成功取消。
  • 5.使用 result 方法可以獲取任務的返回值,注意:這個方法是阻塞的。

四.Python 線程池 ThreadPoolExecutor 簡單使用

# !usr/bin/env python # -*- coding:utf-8 _*- """ @Author:猿說編程 @Blog(個人博客地址): www.codersrc.com @File:Python 線程池 ThreadPoolExecutor.py @Time:2021/05/05 07:37 @Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!"""from concurrent.futures import ThreadPoolExecutor import time# 參數times用來模擬下載的時間 def down_video(times):time.sleep(times)print("down video {}s finished".format(times))return timesexecutor = ThreadPoolExecutor(max_workers=2) # 通過submit函數提交執行的函數到線程池中,submit函數立即返回,不阻塞 task1 = executor.submit(down_video, (3)) task2 = executor.submit(down_video, (2)) # done方法用于判定某個任務是否完成 print("任務1是否已經完成:",task1.done()) # cancel方法用于取消某個任務,該任務沒有放入線程池中才能取消成功 print("取消任務2:",task2.cancel()) time.sleep(4) print("任務1是否已經完成:",task1.done()) # result方法可以獲取task的執行結果 print(task1.result())''' 輸出結果:任務1是否已經完成: False 取消任務2: False down video 2s finished down video 3s finished 任務1是否已經完成: True 3 '''

線程池 ThreadPoolExecutor 使用遠不止如此,由于篇幅有限,關于線程池 as_completed / map / wait 函數和線程池的阻塞和執行順序相關介紹請參考Python 線程池 ThreadPoolExecutor(二)

五.猜你喜歡

  • Python 條件推導式
  • Python 列表推導式
  • Python 字典推導式
  • Python 函數聲明和調用
  • Python 不定長參數 *argc/**kargcs
  • Python 匿名函數 lambda
  • Python return 邏輯判斷表達式
  • Python 字符串/列表/元組/字典之間的相互轉換
  • Python 局部變量和全局變量
  • Python type 函數和 isinstance 函數區別
  • Python is 和 == 區別
  • Python 可變數據類型和不可變數據類型
  • Python 淺拷貝和深拷貝
  • Python 文件讀寫操作
  • Python 異常處理
  • Python 模塊 import
  • Python __name__ == ‘__main__’詳細解釋
  • Python 線程創建和傳參
  • Python 線程互斥鎖 Lock
  • Python 線程事件 Event
  • Python 線程條件變量 Condition
  • Python 線程定時器 Timer
  • Python 線程信號量 Semaphore
  • Python 線程障礙對象 Barrier
  • Python 線程隊列 Queue – FIFO
  • Python 線程隊列 LifoQueue – LIFO
  • Python 線程優先隊列 PriorityQueue
  • 未經允許不得轉載:猿說編程 ? Python 線程池 ThreadPoolExecutor(一)

    總結

    以上是生活随笔為你收集整理的Python 线程池 ThreadPoolExecutor(一) - Python零基础入门教程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。