2016-05-23 3 views
2

Я использую сельдерей для выполнения заданий, связанных с временем. Используя обычные методы командной строки, я легко могу создавать задачи и выполнять их. Для этого я должен создать двух демонов, один для бикини сельдерея, а другой для работника сельдерея.Запуск работника сельдерея и сельдерея в качестве нити

Теперь, хотя сельдерей действительно решает мою проблему создания и выполнения задач, запускаемых по времени, но это происходит за счет двух дополнительных демонов для моей системы. У меня уже есть демон для моего модуля, и я хочу его повторно использовать (добавьте работника сельдерея и бить как поток существующего модуля). Есть ли способ сделать это?

ответ

2

Вы можете использовать app.worker_main(), чтобы запустить рабочего как нить.

Поскольку вы смогли запустить его из командной строки, я предполагаю, что вы уже создали объект для класса Celery (обычно называемый app в документах). Вы можете попробовать следующий код, чтобы запустить рабочего как поток.

from celeryconfig import app # config file you must have build earlier where app = Celery(), object of Celery class 

def worker(): 
    # Arguments you give on command line 
    argv = [ 
     'worker','-A','<module>.tasks', 
     '-P','gevent',  # Would probably need this argument if running with other Greenlets 
     '--loglevel=info'] 
    app.worker_main(argv) 

Просто создайте поток для вышеуказанного метода в файле main.py модуля.

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

def beat_main(self, argv=None): 
    return instantiate(
     'celery.bin.beat:beat', 
     app=self).execute_from_commandline(argv) 

Ваш класс Сельдерей написан в /usr/local/lib/python2.7/dist-packages/celery/app/base.py. Попробуйте использовать его так же, как рабочий (app.beat_main с аргументами). Надеюсь, это сработает и для вас.

Смежные вопросы