[PYTHON] Même si vous annulez ou supprimez le travail dans la file d'attente, le processus en cours d'exécution sur le travailleur ne s'arrête pas.

supposition

Enregistrer un emploi

from django_rq import get_queue

q = get_queue()
job = q.enqueue(En traitement)

Effacer le travail

from django_rq import get_queue

q = get_queue()

job_id = ***
job = q.fetch_job(job_id)

job.cancel()
job.delete()

→ Le traitement en cours sur le travailleur ne s'est pas arrêté

Os.kill (pid) en utilisant le pid que le processus est en cours d'exécution

Vérifiez le pid dans le processus et donnez-le à la méta d'emploi

traitement def:
  job = get_current_job()
  worker = get_worker()
  job.meta['pid'] = worker.pid
  job.save()

  ...

Os.kill (pid) en tuant un travail

from django_rq import get_queue
import os
import signal

q = get_queue()

job_id = ***
job = q.fetch_job(job_id)

pid = job.meta['pid']
os.kill(int(pid), signal.SIGTERM)

job.cancel()
job.delete()

Résumé

――Y a-t-il un autre bon moyen?

Postscript

Ajouter une bonne méthode

référence

Recommended Posts

Même si vous annulez ou supprimez le travail dans la file d'attente, le processus en cours d'exécution sur le travailleur ne s'arrête pas.
Même si vous annulez ou supprimez le travail dans la file d'attente, le processus en cours d'exécution sur le worker ne s'arrête pas (2)
python> n'inclut pas les lettres mm> si "mm" pas dans le texte: / print "sans mm"
[Mémo d'apprentissage] Créer si le répertoire n'existe pas / Récupérer les fichiers dans le répertoire