Pourquoi est-ce que je reçois une RuntimeError sous Windows lors de l'utilisation du multitraitement ?

Barbara Streisand
Libérer: 2024-11-16 10:43:03
original
551 Les gens l'ont consulté

Why Am I Getting a RuntimeError on Windows When Using Multiprocessing?

RuntimeError sous Windows lors de l'utilisation du multitraitement

La rencontre d'une « RuntimeError » lors de la tentative d'utilisation du multitraitement sous Windows indique un problème potentiel avec le démarrage du programme phase. Cette erreur se produit généralement lorsque le module principal lance des sous-processus sans utiliser le langage approprié.

Pour résoudre ce problème, assurez-vous que le module principal inclut la ligne suivante avant de lancer des sous-processus :

if __name__ == '__main__':
    freeze_support()
Copier après la connexion

Exemple de code

Considérez l'extrait de code simplifié suivant qui tente d'utiliser le multitraitement dans des modules séparés sous Windows :

testMain.py (module principal)

import parallelTestModule

extractor = parallelTestModule.ParallelExtractor()
extractor.runInParallel(numProcesses=2, numThreads=4)
Copier après la connexion

parallelTestModule.py (module séparé)

import multiprocessing
from multiprocessing import Process
import threading

class ThreadRunner(threading.Thread):
    def __init__(self, name):
        threading.Thread.__init__(self)
        self.name = name
    def run(self):
        print(self.name, '\n')

class ProcessRunner:
    def runp(self, pid, numThreads):
        mythreads = []
        for tid in range(numThreads):
            name = "Proc-"+str(pid)+"-Thread-"+str(tid)
            th = ThreadRunner(name)
            mythreads.append(th) 
        for i in mythreads:
            i.start()
        for i in mythreads:
            i.join()

class ParallelExtractor:    
    def runInParallel(self, numProcesses, numThreads):
        myprocs = []
        prunner = ProcessRunner()
        for pid in range(numProcesses):
            pr = Process(target=prunner.runp, args=(pid, numThreads)) 
            myprocs.append(pr) 
        for i in myprocs:
            i.start()

        for i in myprocs:
            i.join()
Copier après la connexion

Solution appliquée

Pour corriger l'erreur d'exécution sur Windows, ajoutez le if name == '__main__': guard au module principal :

import parallelTestModule

if __name__ == '__main__':
    extractor = parallelTestModule.ParallelExtractor()
    extractor.runInParallel(numProcesses=2, numThreads=4)
Copier après la connexion

En complétant cette modification, le programme gérera correctement les sous-processus comme prévu sans déclencher l'erreur RuntimeError .

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal