2013-02-25 3 views
0

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

Я делаю это:

result = file.delay(password, source12, destination) 

И,

if result.successful() is True: 
     #writes into database 

Но после того, как задача завершения выполнения он не входит в если condition.I попытался с result.ready(), но не повезло.

Edit: Эти выше линии находятся в той же точки зрения:

def sync(request): 
    """Sync the files into the server with the progress bar""" 
    choice = request.POST.getlist('choice_transfer') 
    for i in choice: 
     source12 = source + '/' + i 
     start_date1 = datetime.datetime.utcnow().replace(tzinfo=utc) 
     start_date = start_date1.strftime("%B %d, %Y, %H:%M%p") 

     basename = os.path.basename(source12) #Get file_name 
     extension = basename.split('.')[1] #Get the file_extension 
     fullname = os.path.join(destination, i) #Get the file_full_size to calculate size 

     result = file.delay(password, source12, destination) 

     if result.successful() is True: 
      #Write into database 

е: #Writes в базу данных

+0

Где эти две линии живут по отношению друг к другу? –

+0

Они оба подпадают под один и тот же вид. – pynovice

ответ

1
  1. При вызове file.delay, очереди сельдерея вверх задачу запустить в фоновом режиме, в какой-то более поздний момент.

  2. Если вы сразу же проверите result.successful(), это будет ложно, так как задача еще не запущена.

Если вам нужно задач цепи (один обжиг за другим) используют решения рабочего процесса сельдерей (в данном случае chain):

def do_this(password, source12, destination): 
    chain = file.s(password, source12, destination) | save_to_database.s() 
    chain() 


@celery.task() 
def file(password, source12, destination): 
    foo = password 
    return foo 


@celery.task() 
def save_to_database(foo): 
    Foo.objects.create(result=foo) 
+0

Итак, что я хочу сделать: после завершения задачи я хочу записать некоторую информацию в базу данных. Как я могу это сделать? – pynovice

+0

Либо добавьте код непосредственно к задаче, которая записывает информацию в базу данных, либо вызовет задачу напрямую, и заблокирует ее до ее завершения. –

+0

Первый, что я сделал! Но я не хочу показывать пользователю задачу в очереди. Если бы я хотел использовать вторую, я бы никогда не пошел к сельдерею джанго. – pynovice