Escriu per cercar…

Multiprocessament

Programació en paral.lel

Un programa Python només utilitza 1 CPU del processador encara que el processador tingui vàries CPUs disponbibles.

Amb el mòdul multiprocessing podem executar una part del nostre programa en un nou procés que s’executarà en una altre CPU del processador.

Això es fa quan tens una funció computacionalment intensiva, que vol dir que ha de fer moltes coses i tarda molt en fer-les com es calcular el Factorial d’un número bastant gran.

A continuació tens una funció factorial:

python
def factorial(n):

    start_time = time.perf_counter()
    fact = 1
    for i in range(1, n + 1):
        fact = fact * i

    print(f"n = {n}: {time.perf_counter() - start_time : .4f} seconds")

Si executes dos cops la funció factorial() pots veure que el programa tarda més d’1 segon en executar-se perquè fins que no s’ha acabat d’executar la primera crida a la funció factorial()no és pot executar la segona crida a la funció factorial().

python
import time

def factorial(n):

    start_time = time.perf_counter()
    fact = 1
    for i in range(1, n + 1):
        fact = fact * i

    print(f"n = {n}: {time.perf_counter() - start_time : .4f} seconds")


if __name__ == "__main__":

    factorial(100000)
    factorial(90000)

    print("Program finished")

Si executes el programa pots veure que el progama tarda uns 5 segons en executar-se perquè només utiliza un procés i una CPU:

shell
$ time python3 multi.py 
n = 100000:  3.1057 seconds
n = 90000:  2.1048 seconds
Program finished

real    0m5,245s
user    0m4,799s
sys     0m0,446s

Amb la llibreria multiprocessing podem crear un procés per executar la tasca factorial.

python
...
import multiprocessing as mp

process = mp.Process(target=factorial, args= (100000,))

Estàs llegint una vista prèvia.

Inicia sessió per llegir l'article complet. Qualsevol compte obre 4 articles gratuïts al mes; l'alumnat i el professorat llegeixen les pàgines del seu curs sense límit.

Inicia sessió