[PYTHON] Selbst wenn Sie den Job in der Warteschlange abbrechen oder löschen, wird der auf dem Worker ausgeführte Prozess nicht gestoppt.

Annahme

Registrieren Sie einen Job

from django_rq import get_queue

q = get_queue()
job = q.enqueue(wird bearbeitet)

Löschen Sie den Job

from django_rq import get_queue

q = get_queue()

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

job.cancel()
job.delete()

→ Die auf dem Worker ausgeführte Verarbeitung wurde nicht gestoppt

Os.kill (pid) mit der pid, die der Prozess ausführt

Überprüfen Sie dabei die PID und geben Sie sie an das Meta des Jobs weiter

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

  ...

Os.kill (pid) beim Töten eines Jobs

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()

Zusammenfassung

―― Gibt es einen anderen guten Weg?

Nachtrag

Fügen Sie eine gute Methode hinzu

Referenz

Recommended Posts

Selbst wenn Sie den Job in der Warteschlange abbrechen oder löschen, wird der auf dem Worker ausgeführte Prozess nicht gestoppt.
Selbst wenn Sie den Job in der Warteschlange abbrechen oder löschen, wird der auf dem Worker ausgeführte Prozess nicht gestoppt (2).
Python> enthält die Buchstaben mm> nicht, wenn "mm" nicht im Text enthalten ist: / print "mm nicht enthalten"
[Lernnotiz] Erstellen, wenn das Verzeichnis nicht vorhanden ist / Dateien im Verzeichnis abrufen