1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問(wèn)題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
      python線程池ThreadPoolExecutor(上-創(chuàng)新互聯(lián)

      在前面的文章中我們已經(jīng)介紹了很多關(guān)于python線程相關(guān)的知識(shí)點(diǎn),比如?線程互斥鎖Lock?/?線程事件Event?/?線程條件變量Condition?等等,而今天給大家講解的是?線程池ThreadPoolExecutor,可能很多小伙伴會(huì)疑惑,threading 模塊能創(chuàng)建線程,ThreadPoolExecutor 也能創(chuàng)建線程,兩者都有什么區(qū)別呢?

      10多年專(zhuān)注成都網(wǎng)站制作,成都定制網(wǎng)站,個(gè)人網(wǎng)站制作服務(wù),為大家分享網(wǎng)站制作知識(shí)、方案,網(wǎng)站設(shè)計(jì)流程、步驟,成功服務(wù)上千家企業(yè)。為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),專(zhuān)注于成都定制網(wǎng)站,高端網(wǎng)頁(yè)制作,對(duì)石雕等多個(gè)行業(yè),擁有多年設(shè)計(jì)經(jīng)驗(yàn)。

      眾所周知,程序中使用線程會(huì)提高運(yùn)行效率,雖然線程是計(jì)算機(jī)的最小單位,但是線程的創(chuàng)建和使用一樣會(huì)占用計(jì)算機(jī)資源和產(chǎn)生開(kāi)銷(xiāo),一旦創(chuàng)建成千上萬(wàn)的線程,計(jì)算機(jī)一樣會(huì)死機(jī)!一個(gè)合理的程序永遠(yuǎn)都是以消耗最少的資源干最多的事,就像公司老板,永遠(yuǎn)都想以最少的錢(qián),招最少的人,干最多的事!

      python 線程池ThreadPoolExecutor(上

      哪個(gè)二貨在背后說(shuō)我

      一.線程池原理

      大家都使用過(guò)迅雷下載,當(dāng)同時(shí)下載1000個(gè)任務(wù)甚至更多的時(shí)候,就算開(kāi)通vip同時(shí)下載的數(shù)量也只有8個(gè)。如果同時(shí)創(chuàng)建1000個(gè)線程,首先對(duì)計(jì)算器的開(kāi)銷(xiāo)也很大,而且每次只運(yùn)行8個(gè)線程,需要不停的創(chuàng)建和銷(xiāo)毀,這樣會(huì)顯得很麻煩。

      而使用線程池ThreadPoolExecutor就可以解決上面的問(wèn)題,其實(shí)只需要8個(gè)線程就行了,每個(gè)線程各分配一個(gè)任務(wù),剩下的任務(wù)排隊(duì)等待,當(dāng)某個(gè)線程完成了任務(wù)的時(shí)候,排隊(duì)任務(wù)就可以安排給這個(gè)線程繼續(xù)執(zhí)行,這就是所謂的線程池ThreadPoolExecutor原理!

      python 線程池ThreadPoolExecutor(上

      二.線程池ThreadPoolExecutor函數(shù)介紹

      1.ThreadPoolExecutor構(gòu)造實(shí)例的時(shí)候,傳入max_workers參數(shù)來(lái)設(shè)置線程池中最多能同時(shí)運(yùn)行的線程數(shù)目。

      2.使用submit函數(shù)來(lái)提交線程需要執(zhí)行的任務(wù)(函數(shù)名和參數(shù))到線程池中,并返回該任務(wù)的句柄(類(lèi)似于文件、畫(huà)圖),注意submit()不是阻塞的,而是立即返回。

      3.通過(guò)submit函數(shù)返回的任務(wù)句柄,能夠使用done()方法判斷該任務(wù)是否結(jié)束。下面的例子可以看出,由于任務(wù)有2s的延時(shí),在task1提交后立刻判斷,task1還未完成,而在延時(shí)4s之后判斷,task1就完成了。

      4.使用cancel()方法可以取消提交的任務(wù),如果任務(wù)已經(jīng)在線程池中運(yùn)行了,就取消不了。這個(gè)例子中,線程池的大小設(shè)置為2,任務(wù)已經(jīng)在運(yùn)行了,所以取消失敗。如果改變線程池的大小為1,那么先提交的是task1,task2還在排隊(duì)等候,這是時(shí)候就可以成功取消。

      5.使用result()方法可以獲取任務(wù)的返回值,注意:這個(gè)方法是阻塞的。

      三.線程池ThreadPoolExecutor簡(jiǎn)單使用

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      # !usr/bin/env python

      # -*- coding:utf-8 _*-

      """

      @Author:何以解憂

      @Blog(個(gè)人博客地址): shuopython.com

      @WeChat Official Account(微信公眾號(hào)):猿說(shuō)python

      @Github:www.github.com

      @File:python_threadpool.py

      @Time:2019/11/29 1queue5:25

      @Motto:不積跬步無(wú)以至千里,不積小流無(wú)以成江海,程序人生的精彩需要堅(jiān)持不懈地積累!

      """

      fromconcurrent.futuresimportThreadPoolExecutor

      importtime

      # 參數(shù)times用來(lái)模擬下載的時(shí)間

      defdown_video(times):

      time.sleep(times)

      print("down video {}s finished".format(times))

      returntimes

      executor=ThreadPoolExecutor(max_workers=2)

      # 通過(guò)submit函數(shù)提交執(zhí)行的函數(shù)到線程池中,submit函數(shù)立即返回,不阻塞

      task1=executor.submit(down_video,(3))

      task2=executor.submit(down_video,(2))

      # done方法用于判定某個(gè)任務(wù)是否完成

      print("任務(wù)1是否已經(jīng)完成:",task1.done())

      # cancel方法用于取消某個(gè)任務(wù),該任務(wù)沒(méi)有放入線程池中才能取消成功

      print("取消任務(wù)2:",task2.cancel())

      time.sleep(4)

      print("任務(wù)1是否已經(jīng)完成:",task1.done())

      # result方法可以獲取task的執(zhí)行結(jié)果

      print(task1.result())

      輸出結(jié)果:

      1

      2

      3

      4

      5

      6

      任務(wù)1是否已經(jīng)完成:False

      取消任務(wù)2:False

      downvideo2sfinished

      downvideo3sfinished

      任務(wù)1是否已經(jīng)完成:True

      3

      線程池的使用遠(yuǎn)不止如此,由于篇幅有限,關(guān)于線程池as_completed / map / wait 函數(shù)等我們留到下一篇文章繼續(xù)介紹~~~

      關(guān)于線程池的阻塞和執(zhí)行順序相關(guān)介紹請(qǐng)參考:python 線程池ThreadPoolExecutor(下)

      猜你喜歡:

      1.python線程隊(duì)列Queue-FIFO

      2.python線程隊(duì)列LifoQueue-LIFO

      3.python線程隊(duì)列PriorityQueue-優(yōu)先隊(duì)列

      4.python線程的創(chuàng)建和參數(shù)傳遞

      5.python線程互斥鎖Lock

      6.python線程事件Event

      轉(zhuǎn)載請(qǐng)注明:猿說(shuō)Python???python線程池ThreadPoolExecutor(上)

      另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


      分享標(biāo)題:python線程池ThreadPoolExecutor(上-創(chuàng)新互聯(lián)
      鏈接URL:http://www.ef60e0e.cn/article/dgjsod.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        兴宁市| 稻城县| 定安县| 教育| 乌兰县| 陵川县| 政和县| 诸城市| 仁怀市| 沧州市| 新泰市| 永春县| 孝昌县| 万源市| 文成县| 海城市| 安塞县| 卢氏县| 乡宁县| 嵊泗县| 敦煌市| 平遥县| 郯城县| 罗田县| 文水县| 玉屏| 扬中市| 西城区| 台湾省| 利津县| 康平县| 松溪县| 日土县| 安康市| 南平市| 沁源县| 独山县| 固安县| 米脂县| 丰顺县| 图们市|