0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

python創(chuàng)建多線程的兩種方法

python爬蟲知識分享 ? 來源:python爬蟲知識分享 ? 作者:python爬蟲知識分享 ? 2022-03-15 16:47 ? 次閱讀

1. 用函數(shù)創(chuàng)建多線程

Python3中,Python提供了一個內(nèi)置模塊 threading.Thread,可以很方便地讓我們創(chuàng)建多線程。

threading.Thread() 一般接收兩個參數(shù)

線程函數(shù)名:要放置線程讓其后臺執(zhí)行的函數(shù),由我們自已定義,注意不要加();

線程函數(shù)的參數(shù):線程函數(shù)名所需的參數(shù),以元組的形式傳入。若不需要參數(shù),可以不指定。

舉個例子

import time
from threading import Thread

# 自定義線程函數(shù)。
def target(name="Python"):
    for i in range(2):
        print("hello", name)
        time.sleep(1)

# 創(chuàng)建線程01,不指定參數(shù)
thread_01 = Thread(target=target)
# 啟動線程01
thread_01.start()


# 創(chuàng)建線程02,指定參數(shù),注意逗號
thread_02 = Thread(target=target, args=("MING",))
# 啟動線程02
thread_02.start()

可以看到輸出

hello Python
hello MING
hello Python
hello MING

2. 用類創(chuàng)建多線程

相比較函數(shù)而言,使用類創(chuàng)建線程,會比較麻煩一點。

首先,我們要自定義一個類,對于這個類有兩點要求,

必須繼承 threading.Thread 這個父類;

必須復(fù)寫 run 方法。

這里的 run 方法,和我們上面線程函數(shù)的性質(zhì)是一樣的,可以寫我們的業(yè)務(wù)邏輯程序。在 start() 后將會調(diào)用。

來看一下例子 為了方便對比,run函數(shù)我復(fù)用上面的main

import time
from threading import Thread

class MyThread(Thread):
    def __init__(self, type="Python"):
        # 注意:super().__init__() 必須寫
        # 且最好寫在第一行
        super().__init__()
        self.type=type

    def run(self):
        for i in range(2):
            print("hello", self.type)
            time.sleep(1)

if __name__ == '__main__':
    # 創(chuàng)建線程01,不指定參數(shù)
    thread_01 = MyThread()
    # 創(chuàng)建線程02,指定參數(shù)
    thread_02 = MyThread("MING")

    thread_01.start()
    thread_02.start()

當(dāng)然結(jié)果也是一樣的。

hello Python
hello MING
hello Python
hello MING

3. 線程對象的方法

上面介紹了當(dāng)前 Python 中創(chuàng)建線程兩種主要方法。

創(chuàng)建線程是件很容易的事,但要想用好線程,還需要學(xué)習(xí)線程對象的幾個函數(shù)。

經(jīng)過我的總結(jié),大約常用的方法有如下這些:

# 如上所述,創(chuàng)建一個線程
t=Thread(target=func)

# 啟動子線程
t.start()

# 阻塞子線程,待子線程結(jié)束后,再往下執(zhí)行
t.join()

# 判斷線程是否在執(zhí)行狀態(tài),在執(zhí)行返回True,否則返回False
t.is_alive()
t.isAlive()

# 設(shè)置線程是否隨主線程退出而退出,默認(rèn)為False
t.daemon = True
t.daemon = False

# 設(shè)置線程名
t.name = "My-Thread"

審核編輯:符乾江
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 多線程
    +關(guān)注

    關(guān)注

    0

    文章

    275

    瀏覽量

    19850
  • python
    +關(guān)注

    關(guān)注

    53

    文章

    4753

    瀏覽量

    84077
收藏 人收藏

    評論

    相關(guān)推薦

    java實現(xiàn)多線程的幾種方式

    的CompletableFuture 一、繼承Thread類 繼承Thread類是實現(xiàn)多線程的最基本方式,只需創(chuàng)建一個類并繼承Thread類,重寫run()方法即可。 ``
    的頭像 發(fā)表于 03-14 16:55 ?435次閱讀

    Multisim仿真幅頻特性曲線和相頻特性曲線的兩種方法

    Multisim仿真幅頻特性曲線和相頻特性曲線的兩種方法
    的頭像 發(fā)表于 12-11 17:29 ?1.3w次閱讀
    Multisim仿真幅頻特性曲線和相頻特性曲線的<b class='flag-5'>兩種方法</b>

    利用SPICE進行放大器穩(wěn)定性分析的兩種方法

    利用SPICE進行放大器穩(wěn)定性分析的兩種方法
    的頭像 發(fā)表于 12-05 15:38 ?4649次閱讀
    利用SPICE進行放大器穩(wěn)定性分析的<b class='flag-5'>兩種方法</b>

    redis多線程還能保證線程安全嗎

    是單線程的,多個客戶端請求會按序執(zhí)行,每個請求使用一個線程完成,這樣可以避免多線程之間的競爭條件和鎖等帶來的開銷。但是,由于Redis是存儲內(nèi)存中的數(shù)據(jù)的,當(dāng)多個客戶端同時對同一個數(shù)據(jù)進行讀寫操作時,就會存在
    的頭像 發(fā)表于 12-05 10:28 ?1346次閱讀

    線程池的創(chuàng)建方式有幾種

    線程池是一種用于管理和調(diào)度線程的技術(shù),能夠有效地提高系統(tǒng)的性能和資源利用率。它通過預(yù)先創(chuàng)建一組線程并維護一個工作隊列,將任務(wù)提交給線程池來處
    的頭像 發(fā)表于 12-04 16:52 ?660次閱讀

    mfc多線程編程實例

    (圖形用戶界面)應(yīng)用程序的開發(fā)。在這篇文章中,我們將重點介紹MFC中的多線程編程。 多線程編程在軟件開發(fā)中非常重要,它可以實現(xiàn)程序的并發(fā)執(zhí)行,提高程序的效率和響應(yīng)速度。MFC提供了豐富的多線程支持,可以輕松地實現(xiàn)
    的頭像 發(fā)表于 12-01 14:29 ?1143次閱讀

    PoE以太網(wǎng)供電的兩種方法

    PoE以太網(wǎng)供電的兩種方法? PoE(Power over Ethernet)以太網(wǎng)供電是一種通過以太網(wǎng)電纜向網(wǎng)絡(luò)設(shè)備傳輸電力的技術(shù)。它可以為無線接入點、IP電話、網(wǎng)絡(luò)攝像機、交換機等設(shè)備提供
    的頭像 發(fā)表于 11-28 15:51 ?767次閱讀

    python怎么創(chuàng)建二維數(shù)組

    如何創(chuàng)建二維數(shù)組在Python中是一個常見的問題。在Python中,我們可以使用嵌套的列表(list of lists)或者使用NumPy庫來創(chuàng)建二維數(shù)組。在本文中,我們將詳細介紹這
    的頭像 發(fā)表于 11-21 15:10 ?3131次閱讀

    多線程如何保證數(shù)據(jù)的同步

    多線程編程是一種并發(fā)編程的方法,意味著程序中同時運行多個線程,每個線程可獨立執(zhí)行不同的任務(wù),共享同一份數(shù)據(jù)。由于多線程并發(fā)執(zhí)行的特點,會引發(fā)
    的頭像 發(fā)表于 11-17 14:22 ?891次閱讀

    多線程同步的幾種方法

    多線程同步是指在多個線程并發(fā)執(zhí)行的情況下,為了保證線程執(zhí)行的正確性和一致性,需要采用特定的方法來協(xié)調(diào)線程之間的執(zhí)行順序和共享資源的訪問。下面
    的頭像 發(fā)表于 11-17 14:16 ?960次閱讀

    關(guān)于Python多進程和多線程詳解

    進程(process)和線程(thread)是操作系統(tǒng)的基本概念,但是它們比較抽象,不容易掌握。關(guān)于多進程和多線程,教科書上最經(jīng)典的一句話是“進程是資源分配的最小單位,線程是CPU調(diào)度的最小單位”。
    的頭像 發(fā)表于 11-06 14:46 ?687次閱讀
    關(guān)于<b class='flag-5'>Python</b>多進程和<b class='flag-5'>多線程</b>詳解

    多線程idm下載軟件

    多線程idm下載軟件
    發(fā)表于 10-23 09:23 ?0次下載

    C語言獲取文件長度的兩種方法

    C語言中沒有直接獲取文件長度的接口,但是我們可以使用標(biāo)準(zhǔn)庫提供的函數(shù)來間接的獲取文件長度。這里提供兩種方法。
    的頭像 發(fā)表于 10-10 16:15 ?1177次閱讀
    C語言獲取文件長度的<b class='flag-5'>兩種方法</b>

    Java多線程的用法

    本文將介紹一下Java多線程的用法。 基礎(chǔ)介紹 什么是多線程 指的是在一個進程中同時運行多個線程,每個線程都可以獨立執(zhí)行不同的任務(wù)或操作。 與單線程
    的頭像 發(fā)表于 09-30 17:07 ?843次閱讀

    HarmonyOS使用多線程并發(fā)能力開發(fā)

    ,RemoteObject對象的創(chuàng)建可以參考RemoteObject的實現(xiàn)。 3、TaskPool和Worker ArkTS提供了TaskPool和Worker兩種并發(fā)能力供開發(fā)者選擇,其具體的實現(xiàn)
    發(fā)表于 09-25 15:23