Есть ли какая-то хитрость в том, чтобы убить или остановить задачу 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.