web-dev-qa-db-fra.com

Fourche multiprofessionnelle () VS SPAWN ()

Je lisais la description des deux à partir du Python Doc :

SPAWN

Le processus de parent commence un produit frais python Processus d'interpréter. Le processus enfant n'héritera que ces ressources nécessaires pour exécuter la méthode des objets de processus (). En particulier, des descripteurs de fichier inutiles et des poignées du processus parent Ne sera pas hérité. Le démarrage d'un processus utilisant cette méthode est plutôt lent par rapport à l'utilisation de la fourchette ou du fourverver. [Disponible sur UNIX et Windows. La valeur par défaut sur Windows et MacOS.]

Fourchette

Le processus parent utilise OS.FORK () à la fourchette THE Python INTERPRÈTE. Le processus d'enfant, lorsqu'il commence, est effectivement identique au processus parent. Toutes les ressources du parent sont héritées par l'enfant. Processus. Notez que la recherche d'un processus multithreadé est problématique. [Disponible sur UNIX uniquement. La valeur par défaut sur UNIX.]

Et ma question est:

  1. est-ce que la fourche est beaucoup plus rapide "parce que cela n'essaie pas d'identifier les ressources nécessaires pour copier?
  2. est-ce que, puisque la fourche duplique tout, il "gaspillerait" beaucoup plus de ressources comparant à Spawn ()?
6
Crystina

Il y a un compromis entre 3 méthodes de démarrage multiprocessionnant :

  1. Fourchette est plus rapide car il effectue une copie-eccrit de la mémoire virtuelle de l'ensemble du processus parent, y compris l'initialisée Python Interprète, modules chargés et objets construits en mémoire.

    Mais la fourchette ne copie pas les threads du processus parent. Ainsi, les verrous (en mémoire) que dans le processus des parents ont été maintenus par d'autres threads sont bloqués chez l'enfant sans posséder des threads pour les déverrouiller, prêts à provoquer une impasse lorsque le code tente d'en acquérir. De plus, toute bibliothèque indigène avec des fils fourchés sera dans un état brisé.

    Les copiés Python modules et objets peuvent être utiles ou ils pourraient potentiellement bouffer chaque processus d'enfant fourchu.

    Le processus enfant "hérite" "hérite" des ressources du système d'exploitation telles que des descripteurs de fichier ouverts et des ports réseau ouverts. Celles-ci peuvent également entraîner des problèmes, mais Python fonctionne autour de certains d'entre eux.

    SO La fourchette est rapide, dangereuse et peut-être bloquée.

    Cependant, ces problèmes de sécurité ne peuvent pas causer de problèmes en fonction de ce que fait le processus d'enfant.

  2. SPAWN commence A Python processus enfant à partir de zéro sans la mémoire du processus parent, des descripteurs de fichier, des threads, etc. techniquement, Pawn Forks Un duplicata du processus en cours, l'enfant appelle immédiatement EXED pour se remplacer par un python frais, puis demande Python pour charger le module cible et exécuter la cible appelable.

    Donc SPAWN est sûr, compact et plus lent depuis Python doit charger, s'initialiser, lire des fichiers, charger et Initialiser les modules, etc.

    Cependant, il pourrait ne pas être sensiblement plus lent par rapport au travail que le processus de l'enfant fait.

  3. Forkerserver Fourchettes Un duplicata du courant Python Process supporté jusqu'à environ un frais Python Processus. Cela devient le processus "serveur de fourche". Ensuite, chaque fois que vous démarrez un processus enfant, il demande au serveur Fork de fourchette un enfant et d'exécuter sa cible appelable.

    Ces enfants traitent tous les démarrages compacts et sans blocages bloqués.

    forkerserver est plus compliqué et pas bien documenté. Poste du blog de Bojan Nikolic Explique davantage sur Fordkerserver et sa technologie Secret set_forkserver_preload() Méthode pour précharger certains modules. Méfiez-vous d'utiliser une méthode sans papiers, en particulier avant le correction de bugs in Python 3.7. .

    SO Forkerserver est rapide, compact et sûr, mais il est plus compliqué et pas bien documenté .

[Les documents ne sont pas géniaux sur tout cela, donc j'ai combiné des informations de plusieurs sources et apporté certaines inférences. Faire des commentaires sur toutes les erreurs.]

0
Jerry101