關於多執行緒的那點事 -Python
推薦大家先了解一哈程序:從零開始的多程序生活 - 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()
不難吧,不會真的有人覺得難吧,不會吧不會吧…
如果哪裡不理解的話,就在留言裡問哦,儘量爭取及時回答!
啪的一下就結束了…
不要問我為什麼這麼短,精悍!