Maison >développement back-end >Tutoriel Python >Python multi-threading et multi-processus : analyse de cas pratiques, maîtriser les compétences applicatives de la programmation concurrente

Python multi-threading et multi-processus : analyse de cas pratiques, maîtriser les compétences applicatives de la programmation concurrente

WBOY
WBOYavant
2024-02-25 09:13:36479parcourir

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

1. python Aperçu multi-threading et multi-processus

1. Multi-threading

Multiple Threads est une technologie de programmation simultanée qui permet à un programme d'effectuer plusieurs tâches en même temps. Dans Python, vous pouvez utiliser le module de threading pour créer et gérer des threads. Les threads partagent l'espace mémoire du programme, afin que les données puissent être partagées facilement. Cependant, la programmation multithread présente également certains défis, tels que des problèmes de thread de sécurité et des problèmes de verrous morts .

2. Multi-processus

Le multitraitement est une technique de programmation concurrency qui permet à un programme d'effectuer plusieurs tâches en même temps. En Python, vous pouvez utiliser le module multitraitement pour créer et gérer des processus. Le processus est indépendant de l'espace mémoire du programme, il n'y a donc aucun problème de sécurité des threads. Cependant, la programmation multi-processus présente également certains défis, tels que des problèmes de communication et de synchronisation inter-processus.

2. Cas pratique 1 : Utiliser le multi-threads pour accélérer le traitement des images

Exigences : Il existe un dossier contenant 1 000 images et chaque image doit être traitée, y compris le redimensionnement, la netteté et l'ajout de filigranes.

Solution :Le multithreading peut être utilisé pour accélérer le traitement des images. Les étapes spécifiques sont les suivantes :

  1. Tout d’abord, enregistrez la liste des fichiers image dans une liste.
  2. Ensuite, utilisez le module de threading pour créer un thread pool.
  3. Ensuite, attribuez des tâches de traitement d'image aux threads du pool de threads.
  4. Enfin, après avoir attendu que tous les threads terminent leurs tâches, enregistrez l'image traitée dans un fichier.

En utilisant le multithreading, le temps de traitement des images peut être considérablement réduit.

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()

3. Cas pratique 2 : Utiliser le multi-processus pour accélérer le calcul scientifique

Exigences : Un calcul scientifique doit être effectué, impliquant un grand nombre de calculs en virgule flottante.

Solution :Plusieurs processus peuvent être utilisés pour accélérer les calculs scientifiques. Les étapes spécifiques sont les suivantes :

  1. Tout d’abord, divisez la tâche de calcul scientifique en plusieurs sous-tâches.
  2. Ensuite, utilisez le module multitraitement pour créer le pool de processus.
  3. Ensuite, attribuez des sous-tâches aux processus du pool de processus.
  4. Enfin, attendez que tous les processus terminent leurs tâches, puis résumez les résultats des sous-tâches.

En utilisant plusieurs processus, le temps de calcul scientifique peut être considérablement réduit.

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()

IV. Résumé

À travers les deux cas pratiques ci-dessus, nous avons vu la puissance puissante du multi-threading et du multi-processus dans la programmation concurrente. Dans le développement réel, nous pouvons choisir une technologie de programmation simultanée appropriée en fonction de besoins spécifiques.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer