詳解Python併發程式設計之建立多執行緒的幾種方法

2022-09-29 22:51:26 字數 2311 閱讀 9597

大家好,併發程式設計 今天開始進入第二篇。

本文目錄

經過總結,python建立多執行緒主要有如下兩種方法:

接下來,我們就來揭開多執行緒的神秘面紗。

. 學會使用函式建立多執行緒

在pytho程式設計客棧n3中,python提供了乙個內建模組 threading.thread,可以很方便地讓我們建立多執行緒。

threading.thread() 一般接收兩個引數:

舉個例子

import time

from threading import thread

# 自定義執行緒函式。

def main(name="python"):

for i in range(2):

print("hello", name)

time.sleep(1)

# 建立執行緒01,不指定引數

thread_01 = thread(target=main)

# 啟動執行緒01

thread_01.start()

# 建立執行緒02,指定引數,注意逗號

thread_02 = thread(target=main, args=("ming",))

# 啟動執行緒02

thread_02.start()

可以看到輸出

hello python

hello ming

hello python

hello ming

是不是超級簡單呢?別急,下面也是一樣簡單。

. 學會使用類建立多執行緒

相比較函式而言,使用類建立執行緒,會比較麻煩一點。

首先,我們要自定義乙個類,對於這個類有兩點要程式設計客棧求,

這裡的 run 方法,和我們上面執行緒函式的性質是一樣的,可以寫我們的業務邏輯程式。在 start() 後將會呼叫。

來看一下例子

為了方便對比,run函式我復用上面的main。

import time

from threading import thread

class mythread(thread):

def __init__(self, name="python"):

# 注意,super().__init__() 一定程式設計客棧要寫

# 而且要寫在最前面,否則會報錯。

super().__init__()

self.name=name

def run(self):

for i in range(2):

print("hello", self.name)

time.sleep(1)

if __name__ == '__main__':

# 建立執行緒01,不指定引數

thread_01 = mythread()

# 建立執行緒02,指定引數

thread_02 = mythread("wgtjmeming")

thread_01.start()

thread_02.start()

當然結果也是一樣的。

hello python

hello ming

hello python

hello ming

. 多執行緒:必學函式講解

學完了兩種建立執行緒的方式,你一定會驚嘆,咋麼這麼簡單,一點難度都沒有。

其實不然,上面我們的執行緒函式 為了方便理解,都使用的最簡單的**邏輯。而在實際使用當中,多執行緒執行期間,還會出現諸多問題,只是我們現在還沒體會到它的複雜而已。

不過,你也不必擔心,在後面的章節中,我會帶著大家一起來**一下,都有哪些難題,應該如何解決。

磨刀不誤吹柴工,我們首先得來認識一下,python給我們提供的 thread 都有哪些函式和屬性,實現哪些功能。學習完這些,在後期的學習中,我們才能更加得以應手。

經過我的總結,大約常用的方法有如下這些:

t=thread(target=func)

# 啟動子執行緒

t.start()

# 阻塞子執行緒,待子執行緒結束後,再往下執行

t.join()

# 判斷執行緒是否在執行狀態,在執行返回true,否則返回false

t.is_alive()

t.isalive()

# 設定執行緒是否隨主線程退出而退出,預設為false

t.daemon = true

t.daemon = false

# 設定執行緒名

t.name = "my-thread"

好了,python執行緒基礎知識,我們大概都介紹完了。

本文標題: 詳解python併發程式設計之建立多執行緒的幾種方法

本文位址:

併發程式設計之CyclicBarrier詳解

cyclicbarrier 迴圈屏障 它是乙個同步助手工具,它允許多個執行緒在執行完相應的操作之後彼此等待共同到達乙個障點 barrier point cyclicbarrier 也非常適合用於某個序列化任務被分拆成若干個並行執行的子任務,當所有的子任務都執行結束之後再繼續接下來的工作。cyclic...

Python併發程式設計之程序池

前言 本博文主要講解python併發程式設計中的程序池 pool python多程序中的multiprocessing python多程序中的fork python程序通訊之queue 當我們需要建立的子程序數量不多時,可以直接利用multiprocessing中的process動態成生多個程序,但...

併發程式設計之併發佇列

jdk 中提供了一系列場景的併發安全佇列。總的來說,按照實現方式的不同可分為阻塞佇列和非阻塞佇列,前者使用鎖實現,而後者則使用cas 非阻塞演算法實現。1 非阻塞佇列 concurrentlinkedqueue concurrentlinkedqueue是無界非阻塞佇列,內部使用單項鍊表實現 其中有...