筆記||Pyhton3進階之多線程原理

# 多線程python

# 一個進程至關於一個或多個線程編程

# 當沒有多線程編程時,一個進程也是一個主線程多線程

# 但有多線程編程時,一個進程包含多個線程,包括主線程併發

# 使用線程 能夠實現程序的併發函數

# python3中多多線程支持的是threading模塊操作系統

# import threading線程

# 在python3中,能夠經過兩種方法來建立線程對象

'''
兩種方法:繼承

     ① 使用threading.Thread直接在線程中運行函數(調用Thread類的構造器建立線程)。生命週期

         target參數:傳入一個函數對象(函數名);

         args參數:傳入一個元組,做爲目標函數的入參;

         步驟以下:

             1 - 調用Thread類的構造器建立線程對象,在建立對象時,target參數指定的函數將做爲線程執行體

             2 - 調用線程對象的star()方法啓動該線程

     ② 繼承Thread類建立線程類。

         步驟以下:

             1 - 定義Thread類的子類,並重寫該類的run()方法,run()方法的方法體就表明了線程須要完成的任務,所以把run()方法稱爲線程執行體

             2 - 建立Thread子類的實例,即建立線程對象

             3 -調用線程對象的star()方法來啓動線程

     推薦使用第一種方式來建立線程,這種方式編程簡單,線程直接包裝target函數,具備更清晰的邏輯結構
'''

# 如何獲取主線程的名稱

# threading.current_thread().getName()

# 線程的調度方式

# start方法 啓動線程

# join方法 等待線程

import threading

import time


def thread_run(name):

time.sleep(2)

print("%s first thread!!!" % name)


t1 = threading.Thread(target=thread_run, args=('peiyanan', ))

t2 = threading.Thread(target=thread_run, args=('tanyongling', ))

t1.start()

t2.start()

t1.setName('子線程1') # 設置線程的名稱name

print(t1.name) # 打印線程名

print(t1.getName()) # 獲取線程名稱

print(t1.is_alive()) # isalive()方法用於判斷線程是否運行 未運行會顯示False

# t1.join()
# t2.join()  
# print('主線程正在運行!!')


# -------------------------------------------------------


# 如何優雅的使用多線程

# 能夠使用for循環來控制建立線程的數量

# menu = ['數學', '英語', '語文', '地理', '歷史']

# for m in menu:

#         t = threading.Thread(target=thread_run, args=(m, 2))

#         t.start()


# 線程調度

# 操做系統不會讓一個線程一直佔用CPU的

# 線程的生命週期
'''
四個狀態:
①新建狀態 指該線程已經初始化,但還沒啓動
②運行狀態 指線程的正常執行狀態
③阻塞狀態 指線程處於執行狀態,但因爲沒有得到CPU的執行時間,而處在CPU外部等待線程執行的狀態
④死亡狀態 指線程執行結束
'''

# 使用線程須要注意到的點''' 線程獨有的資源 調用的函數局部變量,線程都會有個本身的拷貝 不會衝突 線程有時會給開發上帶來麻煩:如 共享數據的訪問,好比全局變量'''

相關文章
相關標籤/搜索