Python-線程(1)

什麼是線程

線程與進程都是虛擬單位,目的是爲了更好的描述某種事物安全

進程與線程的區別

進程:資源單位併發

線程:執行單位ui

開啓一個進程,必定會有一個線程,線程纔是真正的執行者線程

  • 進程間數據獨立,線程間數據共享
  • 進程間通訊能夠使用隊列,線程間數據共享
  • 線程cpu切換要比進程切換 快的多

開啓線程

# coding=utf-8
from threading import Thread
from threading import current_thread
import time

'''
開啓線程方式1:
'''
def task():
    print(f"{current_thread().name} 線程開啓")
    time.sleep(1)
    print(f"{current_thread().name} 線程結束")

if __name__ == '__main__':

    for i in range(3):
        t = Thread(target=task)
        t.daemon = True
        t.start()

        # 判斷子線程是否存活
        print(t.is_alive())
        print(t.isAlive())

    print("主|")

'''
開啓線程方式2:
'''
class MyThread(Thread):
    def run(self):
        print(f"{current_thread().name} 線程開啓")
        time.sleep(1)
        print(f"{current_thread().name} 線程結束")

if __name__ == '__main__':
    t = MyThread()
    t.start()

Thread-1 線程開啓
True
True
Thread-2 線程開啓
True
True
Thread-3 線程開啓
True
True
主|

線程對象的屬性:code

current_thread().name:表示當前線程的名字對象

t.daemon = True:線程的守護進程 跟着主線程一塊兒死掉隊列

t.is_alive() or t.isAlive():判斷子線程是否存活進程

t.join():等待子線程結束內存

爲何要使用線程

節省內存資源

開啓進程:會開闢一個名稱空間,每開啓一個進程都會佔用一分內存資源

,會自帶一個線程

開啓線程:一個進程能夠開啓多個線程,線程的開銷遠小於進程

注意:進程不能實現並行,線程只能實現併發,進程能夠實現並行

比喻:內存就像一個工廠,子進程就像是一個個工廠車間,線程就像車間內的流水線

線程之間數據是共享的

線程互斥鎖

# coding=utf-8

from threading import Thread,current_thread,Lock
import time

n = 100

'''
線程中數據時共享的,若是不加鎖,那麼每一個線程搶到的資源都將是同一個,則不能保證數據的安全
'''
def task(i,mutex):
    print(f"線程 {current_thread().name} 啓動")
    global n

    # 添加線程互斥鎖
    mutex.acquire()
    temp = n
    time.sleep(0.1)
    n = temp - 1
    # 釋放互斥鎖
    mutex.release()

    print(f"線程 {current_thread().name} 結束")
    # print(n)

if __name__ == '__main__':
    mutex = Lock()
    for i in range(10):
        t = Thread(target=task,args=(i,mutex))
        t.start()
        t.join()

    print(n)

    
線程 Thread-1 啓動
線程 Thread-1 結束
線程 Thread-2 啓動
線程 Thread-2 結束
線程 Thread-3 啓動
線程 Thread-3 結束
線程 Thread-4 啓動
線程 Thread-4 結束
線程 Thread-5 啓動
線程 Thread-5 結束
線程 Thread-6 啓動
線程 Thread-6 結束
線程 Thread-7 啓動
線程 Thread-7 結束
線程 Thread-8 啓動
線程 Thread-8 結束
線程 Thread-9 啓動
線程 Thread-9 結束
線程 Thread-10 啓動
線程 Thread-10 結束
90
相關文章
相關標籤/搜索