1. 程式人生 > 其它 >關於多執行緒的那點事 -Python

關於多執行緒的那點事 -Python

技術標籤:Pythonpython多執行緒

在這裡插入圖片描述
推薦大家先了解一哈程序:從零開始的多程序生活 - Python

回頭康一康

上一期呢,咱們把多程序給說的差不多了,只要我們想同時進行一些事情,處理器呢就會分配一定的資源,這個一定就是說,有低保的。

就比如說啊,假設咱們現在把另外一個次元的世界佔領了,然後手下又有很多得力干將,就像分地給他們,就一大塊一大塊的分唄。

給小明一個外次元的美國,給小紅一個外次元的英國…

這就叫分配一定的資源,就是你要給人家地,不會給的太少吧,比如給個外次元的日本,那就太小啦!!!

在這裡插入圖片描述

這就叫分程序!

就假如說我們給了小明一個很大的地方嘛,但是他又不可能全部利用上吧。

也就是說我們如果開了很多程序,但是這些程序有很多都是大材小用,反而佔了很多資源,讓我們的電腦變得非常非常卡!

所以,就需要執行緒出馬啦~

也就是說,你給小明派到哪個國家的哪個省的哪個縣,這樣不但節省了資源,還提高了資源的利用率,對吧!

在這裡插入圖片描述

執行緒?執行緒!

先了解一件事:執行緒是分配資源的最小單位。

也就是說,利用好執行緒,就不存在資源上的浪費了嘛~

還有一件事:程序只是分配的資源,真正幹事的,還是執行緒!

那你可能就要問了,我們之前明明開的是多程序,哪裡來的執行緒呢,你簡直是在開玩笑~

在這裡插入圖片描述
其實每開一個程序裡面就會預設有一個執行緒。

沒有交易,就沒有傷害,讓我們少開一個程序,拯救一個執行緒!

在這裡插入圖片描述


那麼那麼那麼,也就是說程序只是執行緒的容器嘍,真正幹活的,還是執行緒!

但是啊,一個程序分配的資源是固定的嘛,裡面的執行緒預設是一個,也就是說浪費了很多資源鴨,一個程序是不可能只能開一個執行緒的吧。

所以啊,就有了我們的多執行緒!

實戰!!!

那麼,就祭出我們的兩個函式:

def funcA():
    for i in range(10):
        print('我為工作狂!')
        sleep(0.3)

def funcB():
    for i in range(20):
        print('誰也不能阻止我工作!')
        sleep(0.3)

這是兩個函式,也是我們兩個親愛的員工~

現在呢,我們就要利用執行緒,來讓他們實現同時工作!

老傳統了,先匯入執行緒模組唄:

# 匯入執行緒模組
import threading
# 匯入休眠模組
from time import sleep

其實大致的流程跟程序是一樣的,可以說是差不多的,接下來就建立執行緒物件唄!

if __name__ == '__main__':

    # 建立執行緒物件
    thread_A = threading.Thread(target=funcA)
    thread_B = threading.Thread(target=funcB)

然後呢…就啟動執行緒唄~

    # 啟動執行緒
    thread_A.start()
    thread_B.start()

可以看到,多執行緒其實跟多程序是差不多的,也是很簡單很簡單的哈。

在這裡插入圖片描述

如 何 傳 參

相信看過多程序的小夥伴,就會覺得這裡我看過!

是的沒錯,多程序和多執行緒確實是挺像的,就連傳參的方式,也是很像很像!

def funcA(a):
    for i in range(10):
    	# 看不懂的話…百度一下format
        print('{0}為工作狂!'.format(a))
        sleep(0.3)

if __name__ == '__main__':

    # 建立執行緒物件,切記,不帶逗號不是元組
    thread_A = threading.Thread(target=funcA,args=('小明',))

    # 啟動執行緒
    thread_A.start()

上面的程式碼呢嗎,就是一個需要傳參的函式,和一個傳參的執行緒。

同樣的,不光有元組的傳參方式,還有字典的傳參方式!

def funcB(a):
    for i in range(20):
        print('{0}也不能阻止我工作!'.format(a))
        sleep(0.3)
        
if __name__ == '__main__':

    # 建立執行緒物件
    thread_B = threading.Thread(target=funcB,kwargs={'a':'小紅'})

    # 啟動執行緒
    thread_B.start()

不難吧,不會真的有人覺得難吧,不會吧不會吧…

在這裡插入圖片描述
如果哪裡不理解的話,就在留言裡問哦,儘量爭取及時回答!

啪的一下就結束了…

不要問我為什麼這麼短,精悍!
在這裡插入圖片描述