in

Explication du threading et des sous-processus Python

Explication du threading et des sous-processus Python


from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor

from urllib.request import urlopen
from time import perf_counter

def work(n):    
    with urlopen("https://www.google.com/#{n}") as f:
        contents = f.read(32)
    return contents

def run_pool(pool_type):
    with pool_type() as pool:
        start = perf_counter()
        results = pool.map(work, numbers)
    print ("Time:", perf_counter()-start)
    print ((_ for _ in results))    

if __name__ == '__main__':
    numbers = (x for x in range(1,16))
    
    # Run the task using a thread pool
    run_pool(ThreadPoolExecutor)
    
    # Run the task using a process pool
    run_pool(ProcessPoolExecutor)

Comment fonctionne le multitraitement Python

Dans l'exemple ci-dessus, le concurrent.futures Le module fournit des objets pool de haut niveau pour exécuter le travail dans les threads (ThreadPoolExecutor) et les processus (ProcessPoolExecutor). Les deux types de pools ont la même API, vous pouvez donc créer des fonctions qui fonctionnent de manière interchangeable avec les deux, comme le montre l'exemple.

A Lire aussi  les pirates de Medusa ont volé des données extrêmement sensibles

Nous utilisons run_pool soumettre des instances de work fonction aux différents types de piscines. Par défaut, chaque instance de pool utilise un seul thread ou processus par cœur de processeur disponible. La création de pools entraîne une certaine surcharge, alors n'en faites pas trop. Si vous envisagez de traiter de nombreux travaux sur une longue période, créez d'abord le pool et ne vous en débarrassez pas avant d'avoir terminé. Avec le Executor objets, vous pouvez utiliser un gestionnaire de contexte pour créer et supprimer des pools (with/as).

pool.map() est la fonction que nous utilisons pour subdiviser le travail. Le pool.map() La fonction prend une fonction avec une liste d'arguments à appliquer à chaque instance de la fonction, divise le travail en morceaux (vous pouvez spécifier la taille du morceau mais la valeur par défaut est généralement correcte) et transmet chaque morceau à un thread ou un processus de travail.

A Lire aussi  Le Tesla Semi peut franchir plus de 1700 kilomètres en un seul jour

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

GIPHY App Key not set. Please check settings

Côte d’Ivoire-AIP/ La formation de Sokoura remporte le trophée de la première édition du tournoi de football de Tengréla – AIP

Olivier de Lagarde et Vous : l’intégrale du 30/10/2024

Olivier de Lagarde et Vous : l’intégrale du 30/10/2024