Solucionat: mapa multiprocessament

Darrera actualització: 09/11/2023

El multiprocessament és una tècnica popular en la programació de Python que us permet executar diversos processos simultàniament, sovint resultant en millores de rendiment i un ús més eficient dels recursos del sistema. Aquest article s'endinsa en l'ús de la multiprocessament biblioteca en Python, centrada específicament en el mapa funció. La funció de mapa us permet aplicar una funció a cada element d'una iterable, com ara una llista, i retornar una llista nova amb els resultats. Aprofitant el multiprocessament, podem paral·lelitzar aquest procés per a una major eficiència i escalabilitat.

En aquest article, explorarem el problema per al qual el multiprocessament amb funció de mapa pot ser una solució excel·lent, parlarem de les biblioteques i funcions rellevants, proporcionarem una explicació pas a pas del codi i aprofundirem en temes relacionats que es basen en la columna vertebral. del multiprocessament i la funció de mapa.

Mapa de multiprocessament: el problema i la solució

El problema que volem resoldre és millorar el rendiment i l'eficiència d'aplicar una funció a cada ítem en un iterable gran, com ara una llista, una tupla o qualsevol altre objecte que admeti la iteració. Quan s'enfronten a aquestes tasques, utilitzar la funció de mapa integrada o la comprensió de llistes pot ser bastant lent i ineficient.

La solució és utilitzar la biblioteca de multiprocessament a Python, específicament, el piscina classe i la seva mapa mètode. Mitjançant l'ús de funció de multiprocessament Pool.map()., podem distribuir l'execució de la nostra funció en diversos processos.

Explicació pas a pas del codi

Desglossem el codi i il·lustrem com utilitzar la funció de mapa multiprocessament de manera eficaç:

import multiprocessing
import time

def square(n):
    time.sleep(0.5)
    return n * n

# Create the list of numbers
numbers = list(range(10))

# Initialize the multiprocessing Pool
pool = multiprocessing.Pool()

# Use the map function with multiple processes
squared_numbers = pool.map(square, numbers)

print(squared_numbers)
  1. Primer, importeu el multiprocessament mòdul, que conté les eines necessàries per utilitzar el processament paral·lel a Python.
  2. Crea una funció anomenada plaça que simplement dorm durant mig segon i després retorna el quadrat del seu argument d'entrada. Aquesta funció simula un càlcul que triga un temps raonable a completar-se.
  3. Genera una llista anomenada números, que conté nombres enters de 0 a 9 (inclosos).
  4. Inicialitzar a piscina objecte del mòdul multiprocessament. L'objecte Pool serveix com a mitjà per gestionar els processos de treball que utilitzareu per paral·lelitzar les vostres tasques.
  5. Truca al telèfon mapa mètode a l'objecte pool, i passar-hi plaça funció i el números llista. Aleshores, el mètode de mapa aplica la funció quadrada a cada element de la llista de números simultàniament, utilitzant els processos de treball disponibles a l'agrupació.
  6. Imprimiu la llista resultant de nombres_quadrats, que hauria de contenir els valors al quadrat de la llista de números.

Biblioteca de multiprocessament Python

El Python multiprocessament La biblioteca proporciona un mitjà intuïtiu per implementar el paral·lelisme al vostre programa. Oculta part de la complexitat que normalment s'associa amb la programació paral·lela oferint abstraccions d'alt nivell com piscina. La classe Pool simplifica la distribució del treball entre diversos processos, permetent a l'usuari experimentar els avantatges del processament paral·lel amb un mínim de molèstia.

Mòdul Python Itertools i funcions relacionades

Tot i que el multiprocessament és una solució excel·lent per a moltes tasques paral·leles, val la pena esmentar que Python també ofereix altres biblioteques i eines que satisfan necessitats similars. El mòdul itertools, per exemple, ofereix una gran quantitat de funcions que operen en iterables, sovint amb una eficiència millorada. Algunes funcions de itertools com imap() i imap_unordered() pot paral·lelitzar el procés d'aplicació d'una funció a un iterable. Tanmateix, és important tenir en compte que itertools se centra principalment en solucions basades en iteradors, mentre que la biblioteca de multiprocessament ofereix un enfocament més complet del paral·lelisme, proporcionant eines i capacitats addicionals més enllà de les funcions semblants a mapes.

Articles Relacionats: