在這篇文章中,我們將深入探討 Python 中的平行程式設計,特別是使用 threading
和 multiprocessing
模組來實現多執行緒和多進程的應用。這些技術可以幫助我們充分利用現代 CPU 的多核心架構,提高程式的執行效率。
平行程式設計是一種同時執行多個計算任務的技術,常用於提升應用程式的效能。在 Python 中,主要有兩種方式來實現平行:多執行緒 (Multithreading) 和 多進程 (Multiprocessing)。
threading
模組threading
模組是 Python 標準庫的一部分,提供了創建和管理執行緒的功能。
以下是使用 threading
模組的基本範例:
import threading
import time
# 子執行緒的工作函數
def job(num):
print(f"Thread {num} starting")
time.sleep(2)
print(f"Thread {num} finished")
# 建立和啟動子執行緒
threads = []
for i in range(5):
t = threading.Thread(target=job, args=(i,))
threads.append(t)
t.start()
# 等待所有子執行緒結束
for t in threads:
t.join()
print("All threads finished.")
在這個範例中,我們定義了一個名為 job
的函數,然後創建了五個子執行緒,每個執行緒都會呼叫這個函數。使用 t.join()
確保主執行緒在所有子執行緒完成之前不會結束。
我們也可以使用物件導向的方法來創建執行緒:
import threading
import time
class MyThread(threading.Thread):
def __init__(self, num):
super().__init__()
self.num = num
def run(self):
print(f"Thread {self.num} starting")
time.sleep(2)
print(f"Thread {self.num} finished")
threads = []
for i in range(5):
thread = MyThread(i)
threads.append(thread)
thread.start()
for thread in threads:
thread.join()
print("All threads finished.")
在這裡,我們創建了一個繼承自 threading.Thread
的類別,並重寫了 run
方法來定義每個執行緒的工作。
multiprocessing
模組multiprocessing
模組也屬於 Python 標準庫,它允許我們創建獨立的進程,每個進程都有自己的 Python 解釋器,這樣可以繞過 GIL(全局解釋器鎖)的限制。
import multiprocessing
import time
def worker(num):
print(f"Process {num} starting")
time.sleep(2)
print(f"Process {num} finished")
if __name__ == "__main__":
processes = []
for i in range(5):
p = multiprocessing.Process(target=worker, args=(i,))
processes.append(p)
p.start()
for p in processes:
p.join()
print("All processes finished.")
在這段程式碼中,我們使用 multiprocessing.Process
創建了五個獨立的進程,每個進程都會執行 worker
函數。
對於需要創建大量進程的情況,可以使用進程池來管理進程:
import multiprocessing
import time
def worker(num):
print(f"Process {num} starting")
time.sleep(2)
print(f"Process {num} finished")
if __name__ == "__main__":
with multiprocessing.Pool(processes=5) as pool:
pool.map(worker, range(5))
print("All processes finished.")
這裡,我們使用 Pool
來創建一組工作進程,並使用 map
方法將任務分配給這些進程。
在 Python 中,使用 threading
和 multiprocessing
模組可以有效地實現並行處理。根據任務的特性選擇合適的方法,可以顯著提高程式的性能。希望這篇文章能幫助你理解如何在 Python 中實現平行程序設計!