Подпроцесс сельдерея задача, демонизированная с supervisord, не использует задачи - PullRequest
0 голосов
/ 24 октября 2018

У меня трудоемкая задача Python , выполняемая асинхронно с сельдереем и подпроцессом.Этот процесс сельдерея также демонизируется с помощью супервизора.

Код задачи Python:

cmd = 'python' \
      + ' DRScompute.py' \
      + ' --iImage=' + local_filename_image \
      + ' --iData=' + local_filename_annotations \
      + ' --oData=' + output_json_path \
      + ' --oImage=' + output_image_path
print 'Command:', cmd

p = sub.Popen(cmd.split(), stdout=sub.PIPE, stderr=sub.PIPE)
output, errors = p.communicate()
print output
rc = p.wait()

Если я запускаю эту задачу Python непосредственно из терминала (см. Команду ниже) Она выполняет задачуотлично.

команда celery:

celery worker -A tasks --loglevel=INFO --concurrency=1 -n worker

Однако, если я демонизирую этот процесс celery с супервизором (см. конфигурацию ниже) Он выполняетзадача, но следует выполнение оставшегося кода до завершения задачи.

Конфигурация супервизора:

[program:celery]
command=celery worker -A tasks --loglevel=INFO --concurrency=1 -n worker
directory=/home/admin/creta
user=admin
numprocs=1
stdout_logfile=/home/admin/creta/logs/celery-worker.log
stderr_logfile=/home/admin/creta/logs/celery-worker.log
autostart=true
autorestart=true
startsecs=10

; Need to wait for currently executing tasks to finish at shutdown.
; Increase this if you have very long running tasks.
stopwaitsecs = 600

; When resorting to send SIGKILL to the program to terminate it
; send SIGKILL to its whole process group instead,
; taking care of its children as well.
killasgroup=true

; Set Celery priority higher than default (999)
; so, if rabbitmq is supervised, it will start first.
priority=1000

Поэтому, когда я использую супервизор, выполняется задача Python подпроцесса, но она переходит к оставшемуся коду перед завершением трудоемкой задачи.,

...