真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python線程池ThreadPoolExecutor(上-創(chuàng)新互聯(lián)

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

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

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

python 線程池ThreadPoolExecutor(上

哪個二貨在背后說我

一.線程池原理

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

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

python 線程池ThreadPoolExecutor(上

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

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

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

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

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

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

三.線程池ThreadPoolExecutor簡單使用

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(個人博客地址): shuopython.com

@WeChat Official Account(微信公眾號):猿說python

@Github:www.github.com

@File:python_threadpool.py

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

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

"""

fromconcurrent.futuresimportThreadPoolExecutor

importtime

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

defdown_video(times):

time.sleep(times)

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

returntimes

executor=ThreadPoolExecutor(max_workers=2)

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

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

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

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

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

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

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)介紹請參考:python 線程池ThreadPoolExecutor(下)

猜你喜歡:

1.python線程隊列Queue-FIFO

2.python線程隊列LifoQueue-LIFO

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

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

5.python線程互斥鎖Lock

6.python線程事件Event

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

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


網(wǎng)站欄目:python線程池ThreadPoolExecutor(上-創(chuàng)新互聯(lián)
本文URL:http://weahome.cn/article/dgjsod.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部