2012-06-14 2 views
0

Как я могу изменить аргументы, переданные на сельдерей программно? Что я должен изменить в следующем коде:Сельдерей PeriodicTask аргументы

from celery.task import PeriodicTask 

class MyTask(PeriodicTask): 
    run_every = timedelta(seconds=1) 
    value = '' 
    def run(self, **kwargs): 
     print 'Passed value %s' % value 

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

ответ

1

Почему вы хотите изменить аргументы? Кто будет передавать аргументы каждый раз? Метод run вызывается Планировщиком по указанным временам расписания.

Вы можете просто прочитать «значение» из базы данных или что угодно.

def run(self, **kwargs): 
    value = get_value_from_database() 
    print 'Passed value %s' % value 

В противном случае - вам может понадобиться, чтобы создать свой собственный класс планировщика, как описано здесь: http://celery.github.com/celery/userguide/periodic-tasks.html#using-custom-scheduler-classes и переопределять некоторые из его методов ..

+0

Это просто простой словарь. Мне действительно нужно создать другую таблицу и прочитать ее из базы данных? – Dejwi

+0

Метод run() вызывается Планировщиком. Поэтому вы должны либо настроить класс Scheduler, либо просто прочитать значение в run() из некоторого носителя непрерывности - DB, File, Cache и т. Д. – Tisho

+0

OK. Сейчас я использую кеш. Но это похоже на хак. – Dejwi

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