[Python] Comment supprimer facilement un processus enfant lancé par multiprocessus à partir d'un autre processus

Lorsque j'écrivais un test pour un programme qui s'exécute en tant que démon, j'avais besoin de le tuer après un certain temps.

Exigences

 main process
   |
   |--- subprocess1
   |--- subprocess2
   |--- subprocess3

Les sous-processus sont démarrés comme suit.

# main.py
from multiprocessing import Process

ps = [
    Process(target=hogehoge1),
    Process(target=hogehoge2),
    Process(target=hogehoge3),
]
for i in ps:
    i.start()

** Ce que vous voulez faire **

Effacez d'une manière ou d'une autre tous les sous-processus d'un autre processus.

Premier SIGINT (ctrl + c)

Quand je l'exécute dans le terminal, je peux tout effacer avec celui-ci, donc je vais l'essayer.

# other.py
import subprocess
from time import sleep
from signal import SIGINT

proc = subprocess.Popen(cmd)
sleep(5) #attendre un peu
proc.send_signal(SIGINT)

résultat

Seuls les parents disparaissent et les sous-processus restent.

Attrapez SIGINT en tant que parent

De cette façon, cela a fonctionné. Le parent devrait avoir un signal (de l'expérience précédente), supprimons donc le sous-processus du parent. Modifiez le fichier parent.

# main.py
from signal import SIGINT
import signal

def signalHandler(signal, handler) :
    for i in ps:
        i.terminate()
    exit(0)

if __name__ == "__main__":
    signal.signal(signal.SIGINT,  signalHandler)
    signal.signal(signal.SIGTERM, signalHandler)

Remarque: Si vous oubliez ʻexit (0) `, vous ne pourrez pas tuer le processus parent.

Résumé

Il n'est pas bon de faire du multi-processus dans l'atmosphère.

Recommended Posts

[Python] Comment supprimer facilement un processus enfant lancé par multiprocessus à partir d'un autre processus
Comment ouvrir un navigateur Web à partir de python
Comment générer un objet Python à partir de JSON
Comment enregistrer une table récupérée par python en csv
[Python] Comment appeler une fonction de c depuis python (édition ctypes)
Comment utiliser NUITKA-Utilities hinted-compilation pour créer facilement un fichier exécutable à partir d'un script Python
[Python] Comment créer une liste de chaînes de caractères caractère par caractère
Comment découper un bloc de plusieurs tableaux à partir d'un multiple en Python
Comment exécuter un programme Python à partir d'un script shell
Comment lancer AWS Batch à partir de l'application cliente Python
Comment remplacer une méthode de type défini par l'utilisateur générée par python swig
Comment démarrer avec Python
Comment accéder à wikipedia depuis python
Python pour passer d'une autre langue
Comment obtenir une chaîne à partir d'un argument de ligne de commande en python
[Python] Comment obtenir et modifier les lignes / colonnes / valeurs d'une table.
Node.js: Comment tuer les descendants d'un processus démarré par child_process.fork ()
Passer la liste de Python vers C ++ par référence dans pybind11
Comment supprimer les doublons d'une liste Python tout en préservant l'ordre.
Comment créer un clone depuis Github
Comment convertir facilement le format de Markdown
[Python] Comment rendre une classe itérable
Exécuter un script depuis Jupyter pour traiter
[Python] Comment convertir une liste bidimensionnelle en liste unidimensionnelle
Comment mettre à jour Google Sheets à partir de Python
[Python] Comment inverser une chaîne de caractères
Comment obtenir la valeur du magasin de paramètres dans lambda (en utilisant python)
Comment obtenir stacktrace en python
Comment accéder à RDS depuis Lambda (python)
Comment utiliser facilement les appareils électroménagers IOT de Siri par piratage API
Comment créer un référentiel à partir d'un média
Comment exécuter des scripts Maya Python
Comment trier en spécifiant une colonne dans le tableau Python Numpy.
Comment déposer Google Docs dans un dossier dans un fichier .txt avec python
[python] Comment trier par le Nth Mth élément d'un tableau multidimensionnel
Comment installer la bibliothèque Python qui peut être utilisée par les sociétés pharmaceutiques
Envoyer un message de Slack à un serveur Python
[python] Comment afficher les éléments de la liste côte à côte
Comment lire un fichier CSV avec Python 2/3
Comment effacer un taple dans une liste (Python)
Comment incorporer des variables dans des chaînes python
Comment créer un objet fonction à partir d'une chaîne
Étude de Python Hour7: Comment utiliser les classes
Comment créer un fichier JSON en Python
[Python] Comment lire les données de CIFAR-10 et CIFAR-100
Comment ajouter un chemin de recherche de module Python
Comment bien gérer les commandes Linux à partir de Python
Comment extraire le coefficient de la formule minute
Comment effacer les caractères générés par Python
[Python] Comment dessiner un histogramme avec Matplotlib
[Python] Comment trier les instances par variables d'instance
Lire ligne par ligne à partir d'un fichier avec Python
Zubu amateur veut démarrer Python
Comment publier des pages GitHub avec Pelican, un générateur HTML statique créé par Python
Comment mettre Pyenv sur Amazon Linux et Ubuntu pour créer un environnement Python 3.6.0
Comment vérifier en Python si l'un des éléments d'une liste est dans une autre liste
[Traitement du langage naturel / PNL] Comment effectuer facilement une traduction arrière par traduction automatique avec Python