2015-10-05 1 views
1

У меня есть Python Celery, работающий как демон с Celerybeat, собирающим задачи на ящике Amazon Linux. Когда я запускаю свою тестовую задачу, она завершается без инцидентов.Невозможно выполнить Ruby Script во время работы Python Celery как Daemon

@app.task 
def test(): 
    print("Testing 123") 
    return 0 

Однако, когда я пытаюсь выстрелить сценарий Ruby, используя модуль Python, subprocess он опрашивает несколько раз, а затем завершает работу с кодом возврата 1.

@app.task 
def run_cli(): 
    try: 
     process = subprocess.Popen([filepath, "run"], stdout=subprocess.PIPE) 

     while not process.poll(): 
      data = process.stdout.readline() 
      if data: 
       sys.stdout.write("Polling: " + data.decode("utf-8")) 
      else: 
       sys.stdout.write("Polling: No Data.") 

     return process.wait() 
    except Exception as e: 
     print(e) 

Я подтвердил, что сценарий Рубин работает чисто при исполнении сельдерея работника в оболочке Python с использованием tasks.run_cli.apply(). Итак, почему же этот Задак сельдерея не выполняет эти задачи?

Предупреждение: я довольно новичок в Python & Сельдерей и мои навыки Linux неоднородны, поэтому я извиняюсь, если это что-то очевидное. Буду признателен за любую оказанную помощь.

ответ

0

Для завершения опроса Ruby скрипт должен был отправить ненулевой сигнал обратно на скрипт Python, иначе процесс завершится, и Python продолжит опрос без получения данных. Также возможно вырваться из цикла в условии else, так как ответ ложности на process.stdout.readline() указывает (я подозреваю), что обработка скрипта завершена.