Extraction des valeurs de retour des fonctions dans les instances Multiprocessing.Process
La possibilité de récupérer les valeurs de retour des fonctions passées à multiprocessing.Process peut être un fonctionnalité utile, en particulier lorsque l’exécution de tâches asynchrones est requise. Malheureusement, les valeurs ne sont pas immédiatement accessibles depuis l'objet Process, ce qui nécessite une approche alternative.
Comprendre le stockage des valeurs
Contrairement aux fonctions Python traditionnelles, celles transmises au multiprocessing.Process n'ont pas d'attribut de valeur de retour. Au lieu de cela, la valeur est stockée dans un emplacement distinct, notamment dans un objet de mémoire partagée. En effet, les processus créés à l'aide du multitraitement s'exécutent dans des espaces mémoire séparés, empêchant l'accès direct aux variables du processus principal.
Utilisation de variables partagées pour la communication
Pour accéder au valeur de retour, nous devons établir une forme de communication entre les processus. Une méthode efficace consiste à utiliser des variables partagées. Ce sont des objets qui permettent à plusieurs processus de partager et d'accéder simultanément aux données. Dans notre cas, nous créons un objet gestionnaire et un dictionnaire partagé en utilisant multiprocessing.Manager(). Le dictionnaire fait office de variable partagée.
Accès à la valeur de retour
Dans la fonction de travail, nous remplissons le dictionnaire partagé avec la valeur de retour souhaitée. Le processus principal, après avoir attendu la fin de toutes les tâches, peut accéder à ces valeurs et les récupérer à partir du dictionnaire partagé. En employant cette stratégie, nous extrayons efficacement les valeurs de retour sans compromettre l'approche multitraitement.
Exemple de mise en œuvre
L'exemple suivant présente la mise en œuvre de variables partagées pour récupérer le retour valeurs :
import multiprocessing def worker(procnum, return_dict): """worker function""" print(str(procnum) + " represent!") return_dict[procnum] = procnum if __name__ == "__main__": manager = multiprocessing.Manager() return_dict = manager.dict() jobs = [] for i in range(5): p = multiprocessing.Process(target=worker, args=(i, return_dict)) jobs.append(p) p.start() for proc in jobs: proc.join() print(return_dict.values())
Sortie :
0 represent! 1 represent! 3 represent! 2 represent! 4 represent! [0, 1, 3, 2, 4]
Cette approche nous permet de récupérer les valeurs de retour de la fonction de travail et de démontrer la communication transparente entre les processus dans le cadre multitraitement.
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!