2017-09-08 3 views
0

J'ai une tâche de céleri qui génère des données et les enregistre dans la base de données en utilisant la méthode save() de Django. Parfois j'ai besoin de l'arrêter ce qui est fait en lui envoyant un SIGTERM.Résistance de Django modèle save() à SIGTERM

Je me demande, pourrait-il arriver que je serai assez malchanceux pour envoyer ce signal en cours d'enregistrement, se terminant avec un peu de désordre dans la base de données et/ou les modèles Django?

Répondre

0

Selon this thread, SIGTERM ne fait pas un arrêt chaud et vous êtes susceptibles d'avoir un certain gâchis.

Au lieu de cela, vous devez utiliser SIGINT qui attendra la fin de la tâche, puis il se fermera.

This thread peut également vous être utile.

UPDATE:

SIGTERM est le signal de terminaison. Son intention est de tuer le processus, gracieusement ou non.

SIGINT est le signal d'interruption. Son intention est de fournir un mécanisme pour une fermeture ordonnée et gracieuse.

J'espère que ça aide!

+0

Vous dites que 'SIGINT' attendra que la tâche se termine. N'est-ce pas ce que la tâche ferait naturellement? Quel est le but de 'SIGINT' ici? – karlosss

+0

@karlosss voir la réponse mise à jour –

+0

Je pense que nous nous manquons un peu. Je veux tuer seulement une tâche de céleri qui est exécutée, pas le céleri entier. C'est pourquoi je manque le but de 'SIGINT' quand il attend réellement que la tâche se termine. – karlosss