Как убить задачу Celery с сервера Django dev? - PullRequest
0 голосов
/ 10 февраля 2020

Есть ли какая-то хитрость в том, чтобы убить или остановить задачу Celery с сервера Django dev?

Я пытаюсь протестировать некоторые функции Django, чтобы запускать и останавливать задачу Celery на локальный сервер разработчиков, и работник Celery запускает задачу, но полностью не отвечает на все запросы на остановку.

Задача Celery - это простое бесконечное l oop, которое никогда не заканчивается:

def my_test_task():
    i =0
    while 1:
        i += 1
        print('i: %i' % i)
        time.sleep(1)

И я запускаю работника Celery напрямую через:

 celery worker -A myapp -l info -n celery@%h -Q celery

Я могу запустить задачу, используя обычный метод .delay(), и записываю возвращенный task_id.

По документам Затем я пытаюсь убить задачу с помощью:

 app.control.revoke(task_id, terminate=True)

и:

 app.control.revoke(task_id, terminate=True, signal='SIGKILL')

Однако ни одна из этих работ не работает .

Я инициализирую переменную Celery app в celery_init.py, которая выглядит следующим образом:

from celery import Celery
from celery._state import _set_current_app

app = Celery('myapp')

app.config_from_object('django.conf:settings', namespace='CELERY')

_set_current_app(app)

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myapp.settings')
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '../myapp')))
django.setup()

app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

# Timeout for Celery tasks if RabbitMQ message broker is down
# (Tasks will throw celery.exceptions.OperationalError)
app.conf.broker_transport_options = {
    'max_retries': 30, # 15s, trying every half second
    'interval_start': 0,
    'interval_step': 0.5,
    'interval_max': 0.5
}

Почему Celery игнорирует запросы на отзыв?

I ' м работает Python3 .7, Джанго == 2.2.4 и сельдерей == 4.3.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...