1. 多執行緒
#多執行緒是一種並發程式設計技術,允許一個程式同時執行多個任務。在Python中,可以使用 threading 模組來建立和管理執行緒。線程共享程式的記憶體空間,因此可以輕鬆地共享資料。但是,多執行緒程式設計也存在一些挑戰,例如執行緒安全性問題和死鎖定問題。
2. 多進程
#多進程是一種並發程式設計技術,允許一個程式同時執行多個任務。在Python中,可以使用 multiprocessing 模組來建立和管理進程。進程獨立於程式的記憶體空間,因此不會有執行緒安全性問題。但是,多進程編程也存在一些挑戰,例如進程間通訊和同步問題。
需求: 有一個包含1000張影像的資料夾,需要對每張影像進行處理,包括調整大小、銳利化和添加浮水印等操作。
解決方案:可以使用多執行緒來加速映像處理。具體步驟如下:
透過使用多線程,可以大幅縮短影像處理的時間。
import threading import os from PIL import Image, ImageFilter def process_image(image_path): image = Image.open(image_path) image = image.resize((256, 256)) image = image.filter(ImageFilter.SHARPEN) image.save(image_path) def main(): # 获取图像文件列表 image_files = os.listdir("images") # 创建线程池 pool = ThreadPool(4) # 将图像处理任务分配给线程池 for image_file in image_files: pool.submit(process_image, ("images/" + image_file, )) # 等待所有线程完成任务 pool.close() pool.join() if __name__ == "__main__": main()
需求: 需要進行一個科學計算,牽涉到大量的浮點計算。
解決方案:可以使用多進程來加速科學計算。具體步驟如下:
透過使用多進程,可以大幅縮短科學計算的時間。
import multiprocessing import math def compute_pi(n): result = 0 for i in range(n): result += 4 * (-1)**i / (2*i + 1) return result def main(): # 分解科学计算任务 n = 100000000 num_processes = 4 sub_tasks = [n // num_processes] * num_processes # 创建进程池 pool = multiprocessing.Pool(num_processes) # 将子任务分配给进程池 results = pool.map(compute_pi, sub_tasks) # 等待所有进程完成任务 pool.close() pool.join() # 汇总子任务的结果 pi = sum(results) print("π =", pi) if __name__ == "__main__": main()
#透過以上兩個實戰案例,我們看到了多執行緒、多進程在並發程式設計中的強大威力。在實際開發中,我們可以根據具體的需求選擇合適的並發程式設計技術。
以上是Python 多執行緒與多進程:實戰案例剖析,掌握並行程式設計的應用技巧的詳細內容。更多資訊請關注PHP中文網其他相關文章!