成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

python線程如何創(chuàng)建和傳參-創(chuàng)新互聯(lián)

這篇文章將為大家詳細講解有關python線程如何創(chuàng)建和傳參,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

站在用戶的角度思考問題,與客戶深入溝通,找到寧都網站設計與寧都網站推廣的解決方案,憑借多年的經驗,讓設計與互聯(lián)網技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網站制作、網站建設、企業(yè)官網、英文網站、手機端網站、網站推廣、主機域名雅安服務器托管、企業(yè)郵箱。業(yè)務覆蓋寧都地區(qū)。

一.線程解釋

線程是cpu最小調度單位,一個程序中至少有一個或者多個線程(至于進程暫時不做講解,后面文章會有詳細解釋)!在開發(fā)中使用線程可以讓程序運行效率更高,多線程類似于同時執(zhí)行多個不同代碼塊。

二.線程創(chuàng)建和啟動

1.導入線程模塊

# 導入線程threading模塊

importthreading

1

2

2.創(chuàng)建線程并初始化線程

調用threading模塊中的缺省函數(shù)Thread,創(chuàng)建并初始化線程,返回線程句柄。如果對缺省函數(shù)已經忘記的小伙伴請回到 python函數(shù)的聲明和定義中關于缺省參數(shù)部分復習一下。

# 創(chuàng)建并初始化線程,返回線程句柄

t=threading.Thread(target=函數(shù)名)

1

2

3.啟動線程

通過初始化返回的線程句柄調用start()函數(shù),啟動線程,此時會自動執(zhí)行在創(chuàng)建線程時target對應的函數(shù)內部的代碼:

# 啟動線程

t.start()

1

2

綜合上面三點,下面使用代碼對python線程thread做詳細講解:

# !usr/bin/env python

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

"""

@Author:何以解憂

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

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

@Github:www.github.com

@File:python_thread.py

@Time:2019/10/16 21:02

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

"""

# 導入線程threading模塊

importthreading

# 導入內置模塊time

importtime

defwash_clothes():

    print("洗衣服開始...")

    # sleep 5 秒,默認以秒為單位

    time.sleep(5)

    print("洗衣服完成...")

defclean_room():

    print("打掃房間開始...")

    # sleep 5 秒,默認以秒為單位

    time.sleep(5)

    print("打掃房間完成...")

if__name__=="__main__":

    # 創(chuàng)建線程并初始化 -- 該線程執(zhí)行wash_clothes中的代碼

    t1=threading.Thread(target=wash_clothes)

    # 創(chuàng)建線程并初始化 -- 該線程執(zhí)行clean_room中的代碼

    t2=threading.Thread(target=clean_room)

    t1.start()

    t2.start()

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

36

37

38

39

輸出結果:

洗衣服開始...

打掃房間開始...

洗衣服完成...

打掃房間完成...

1

2

3

4

運行程序可以發(fā)現(xiàn)程序從運行開始到結束,一共耗時5秒時間!注意觀察輸出日志:

  • 一:洗衣服開始和打掃房間開始幾乎同時開始,兩個事件同時執(zhí)行.

  • 二:程序停止5秒;

  • 三:洗衣服和打掃房間幾乎同時完成

當然你也可以按照以前的學習的內容,先調用wash_clothes函數(shù),在調用clean_room函數(shù),同樣能輸出內容,而耗時卻是10秒左右,示例代碼如下:

# 導入內置模塊time

importtime

defwash_clothes():

    print("洗衣服開始...")

    # sleep 5 秒,默認以秒為單位

    time.sleep(5)

    print("洗衣服完成...")

defclean_room():

    print("打掃房間開始...")

    # sleep 5 秒,默認以秒為單位

    time.sleep(5)

    print("打掃房間完成...")

if__name__=="__main__":

    wash_clothes()

    clean_room()

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

輸出結果:

洗衣服開始...

洗衣服完成...

打掃房間開始...

打掃房間完成...

1

2

3

4

運行程序可以發(fā)現(xiàn)程序從運行開始到結束,一共耗時10秒時間!注意觀察輸出日志:

  • 一:洗衣服開始;

  • 二:程序停止了5秒;

  • 三:洗衣服完成,打掃房間開始

  • 四:程序停止5秒;

  • 五:打掃房間結束,程序結束;

由此可見:多線程可以同時運行多個任務,效率遠比單線程更高!

三.線程傳參

在上面的demo中,我們并沒有為線程傳遞參數(shù),如果在線程中需要傳遞參數(shù)怎么辦呢?

threading.Thread()函數(shù)中有兩個缺省參數(shù) args 和 kwargs ,args 是元組類型,kwargs 是字典類型,缺省值默認為空,除此之外,其實還可以設置線程的名字等,其函數(shù)聲明如下:

(ps:如果對缺省函數(shù)已經忘記的小伙伴請回到 python函數(shù)的聲明和定義中關于缺省參數(shù)部分復習一下)

def__init__(self,group=None,target=None,name=None,

            args=(),kwargs=None,*,daemon=None):

    """This constructor should always be called with keyword arguments. Arguments are:

    *group* should be None; reserved for future extension when a ThreadGroup

    class is implemented.

    *target* is the callable object to be invoked by the run()

    method. Defaults to None, meaning nothing is called.

    *name* is the thread name. By default, a unique name is constructed of

    the form "Thread-N" where N is a small decimal number.

    *args* is the argument tuple for the target invocation. Defaults to ().

    *kwargs* is a dictionary of keyword arguments for the target

    invocation. Defaults to {}.

    If a subclass overrides the constructor, it must make sure to invoke

    the base class constructor (Thread.__init__()) before doing anything

    else to the thread.

    """

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

示例代碼如下:

# 導入線程threading模塊

importthreading

# 導入內置模塊time

importtime

defwash_clothes(*args,**kargcs):

    print("wash_clothes:",args)

    print("wash_clothes:",kargcs)

defclean_room(*args,**kargcs):

    print("clean_room:",args)

    print("clean_room:",kargcs)

if__name__=="__main__":

    t1=threading.Thread(target=wash_clothes,

                          args=(1,"猿說python"),  # args 傳遞元組,可以同時傳遞多個數(shù)據(jù)

                          kwargs={"a":1,"b":False})# kwargs 傳遞字典,可以同時傳遞多個鍵值對

    t2=threading.Thread(target=clean_room,

                          args=(2,False),# args 傳遞元組,可以同時傳遞多個數(shù)據(jù)

                          kwargs={"c":0.2,"d":False})# kwargs 傳遞字典,可以同時傳遞多個鍵值對

    t1.start()

    t2.start()

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

四.線程結束

值得思考的是:在上面這份代碼中一共有幾個線程呢?并非兩個,一共是三個線程:

  • 線程一:__name__ == “__main__” 作為主線程;

  • 線程二:t1 作為子線程;

  • 線程三:t2 作為子線程;

注意:主程序會等待所有子程序結束之后才會結束!

五.相關函數(shù)介紹

1.threading.Thread() — 創(chuàng)建線程并初始化線程,可以為線程傳遞參數(shù) ;

2.threading.enumerate() — 返回一個包含正在運行的線程的list;

3.threading.activeCount(): 返回正在運行的線程數(shù)量,與len(threading.enumerate())有相同的結果;

4.Thread.start() — 啟動線程 ;

5.Thread.join() — 阻塞函數(shù),一直等到線程結束為止 ;

6.Thread.isAlive() — 返回線程是否活動的;

7.Thread.getName() — 返回線程名;

8.Thread.setName() — 設置線程名;

9.Thread.setDaemon() — 設置為后臺線程,這里默認是False,設置為True之后則主線程不會再等待子線程結束才結束,而是主線程結束意味程序退出,子線程也立即結束,注意調用時必須設置在start()之前;

簡單的示例代碼:

# 導入線程threading模塊

importthreading

# 導入內置模塊time

importtime

defwash_clothes(*args,**kargcs):

    time.sleep(2)

    print("wash_clothes:",args)

    time.sleep(2)

    print("wash_clothes:",kargcs)

defclean_room(*args,**kargcs):

    time.sleep(2)

    print("clean_room:",args)

    time.sleep(2)

    print("clean_room:",kargcs)

if__name__=="__main__":

    t1=threading.Thread(target=wash_clothes,

                          args=(1,"猿說python"),  # args 傳遞元組,可以同時傳遞多個數(shù)據(jù)

                          kwargs={"a":1,"b":False})# kwargs 傳遞字典,可以同時傳遞多個鍵值對

    t2=threading.Thread(target=clean_room,

                          args=(2,False),# args 傳遞元組,可以同時傳遞多個數(shù)據(jù)

                          kwargs={"c":0.2,"d":False})# kwargs 傳遞字典,可以同時傳遞多個鍵值對

    # setDaemon(True)意味著主線程退出,不管子線程執(zhí)行到哪一行,子線程自動結束

    # t1.setDaemon(True)

    # t2.setDaemon(True)

    t1.start()

    t2.start()

    print("threading.enumerate():",threading.enumerate())

    print("threading.activeCount():",threading.activeCount())

    print("t1.isAlive():",t1.isAlive())

    print("t1.getName():",t1.getName())

    print("t2.isAlive():",t2.isAlive())

    t2.setName("my_custom_thread_2")

    print("t2.getName():",t2.getName())

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

36

37

38

39

40

41

輸出結果:

threading.enumerate():[<_MainThread(MainThread,started18388)>,<Thread(Thread-1,started16740)>,<Thread(Thread-2,started17888)>]

threading.activeCount():3

t1.isAlive():True

t1.getName():Thread-1

t2.isAlive():True

t2.getName():my_custom_thread_2

clean_room:(2,False)

wash_clothes:(1,'猿說python')

wash_clothes:{'a':1,'b':False}

clean_room:{'c':0.2,'d':False}

1

2

3

4

5

6

7

8

9

10

關于“python線程如何創(chuàng)建和傳參”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

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

文章標題:python線程如何創(chuàng)建和傳參-創(chuàng)新互聯(lián)
新聞來源:http://jinyejixie.com/article20/gpdco.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供外貿建站、網站制作、網站維護、企業(yè)建站、網站收錄面包屑導航

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網站優(yōu)化
卓资县| 寿阳县| 桂林市| 郯城县| 台南市| 砀山县| 抚州市| 洞口县| 海南省| 甘南县| 扎鲁特旗| 五原县| 贡嘎县| 福清市| 伽师县| 江安县| 讷河市| 岳阳市| 阜新| 鄱阳县| 泾川县| 旌德县| 桂东县| 沾益县| 新绛县| 务川| 万载县| 张家港市| 定结县| 安化县| 光泽县| 左云县| 河西区| 酉阳| 科技| 耿马| 西盟| 华宁县| 浦江县| 泾源县| 驻马店市|