Python 使用 threading 套件來讓多執行緒來加速運算速度

內容說明

有的時候會需要用到多執行緒來讓整個程式加速運算,在現代電腦中擁有多核心 CPU 以是常態,但通常一份程式碼都是使用單核心來操控,如果我們讓他多核心操控就可以擁有更快速度啦!

一種自己程式碼寫不好就幫硬體升級的概念XD。

一些說明:

  • 在使用 threading 套件時,不可以將 list 傳給多個 threading
    舉例: A threading 移除 list index 0 的值,B 則呼叫 list index 0 的值,此時會產生錯誤,原因是因為 B threading 還認為 list index 0 的 memory 還在那位置,但卻發現不再、被移除。
  • 因此我們無法保證 List 在多執行緒時能被正常使用。*
  • 在多執行緒需要同時用到一個陣列時,建議使用 deque(內建),import queue
    Python 有保證 queue 在 threading 時絕對安全,因此個人建議盡量使用他。

安裝套件

沒有!他是內建的,完全不需要安裝喔,讚啦。

在程式中匯入套件

還是要的,這是必備。

1
import threading

建立子執行緒的例子

要稍微注意一下:threading.Thread(target= function,args= (A,B)) ,這裡的 function 不可以加括號,因為這裡是找他記憶體位置,但如果你想要執行的 function 有參數要傳進去則要在後面加入 args= (A,B),並記住,他一定要是一個 list or tuple,不可以只是一個 int or string..,一定是要一個陣列。

如果要問我為甚麼?我只知道這是寫套建時的規則,我也沒辦法說出一個很好的大概。

如果需要不斷的讓這些執行緒工作,這裡有一個不錯的寫法,建議看看:
Python 開多執行緒並找出空閒執行緒的方法 (使用 threading 套件)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import threading # 匯入套件
import time # 匯入套件

def job(it,nu): # thread 要執行的工作內容
print("thread" , it , " is ready to work.")
time.sleep(2)
print("thread" , it , "is finished.")

t = [] # 這是 threading 的陣列,我們用這個陣列來表示裡面的某個執行緒。
for i in range(3): # 這裡我們假設給 3 個執行緒
t.append(threading.Thread(target = job , args=(i,"" )))
# t 陣列增加一個執行緒,執行 function 為 job , 參數為 args
t[i].start() # 執行此執行緒

for i in range(3): # 檢查這些執行緒有沒有都做完,才特別寫的
if(t[i].isAlive()): #確認這個執行緒有沒有正在被使用,如果有則是 True
t[i].join() #等待這個執行緒工作完畢

將執行緒寫成 OOP

作者還沒讀到,未來會看看。

QUEUE 搭配 執行續

作者還沒讀到,未來會看看。

防止兩個多執行緒同時寫入一個檔案 (LOCK)

作者還沒讀到,未來會看看。

參考連結

Python 多執行緒 threading 模組平行化程式設計教學

心得

Python 好簡單,可以把一些比較麻煩的事情都解決掉,設計出 Python 的人是天才八,好感謝這個世界有這麼多人無私的奉獻才有辦法讓我自學努力到現在。

多執行緒真的好方便,初學者如果想要略過一些複雜的理論或實作時,用 Python 可以省去很多麻煩呢。

  • 版權聲明: 本部落格所有文章除有特別聲明外,均採用 Apache License 2.0 許可協議。轉載請註明出處!
  • © 2020-2024 John Doe
  • Powered by Hexo Theme Ayer
  • PV: UV: