首頁 > 後端開發 > Python教學 > Python 多執行緒與多進程:實戰案例剖析,掌握並行程式設計的應用技巧

Python 多執行緒與多進程:實戰案例剖析,掌握並行程式設計的應用技巧

WBOY
發布: 2024-02-25 09:13:36
轉載
478 人瀏覽過

Python 多线程与多进程:实战案例剖析,掌握并发编程的应用技巧

一、python 多執行緒與多進程概述

1. 多執行緒

#多執行緒是一種並發程式設計技術,允許一個程式同時執行多個任務。在Python中,可以使用 threading 模組來建立和管理執行緒。線程共享程式的記憶體空間,因此可以輕鬆地共享資料。但是,多執行緒程式設計也存在一些挑戰,例如執行緒安全性問題和死鎖定問題。

2. 多進程

#多進程是一種並發程式設計技術,允許一個程式同時執行多個任務。在Python中,可以使用 multiprocessing 模組來建立和管理進程。進程獨立於程式的記憶體空間,因此不會有執行緒安全性問題。但是,多進程編程也存在一些挑戰,例如進程間通訊和同步問題。

二、實戰案例一:使用多執行緒加速影像處理

需求: 有一個包含1000張影像的資料夾,需要對每張影像進行處理,包括調整大小、銳利化和添加浮水印等操作。

解決方案:可以使用多執行緒來加速映像處理。具體步驟如下:

  1. 首先,將圖像檔案清單保存在一個清單中。
  2. 然後,使用 threading 模組建立執行緒池
  3. 接下來,將影像處理任務指派給執行緒池中的執行緒。
  4. 最後,等待所有執行緒完成任務後,將處理後的映像儲存到檔案中。

透過使用多線程,可以大幅縮短影像處理的時間。

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()
登入後複製

三、實戰案例二:使用多進程加速科學計算

需求: 需要進行一個科學計算,牽涉到大量的浮點計算。

解決方案:可以使用多進程來加速科學計算。具體步驟如下:

  1. 首先,將科學計算任務分解成多個子任務。
  2. 然後,使用 multiprocessing 模組建立進程池。
  3. 接下來,將子任務指派給進程池中的進程。
  4. 最後,等待所有行程完成任務後,將子任務的結果加總起來。

透過使用多進程,可以大幅縮短科學計算的時間。

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中文網其他相關文章!

來源:lsjlt.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板