Когда я добавляю задачу в очередь задач, иногда задача пропадает. Я не получаю никаких ошибок, но я просто не нахожу задачи в своих журналах. Предположим, я добавляю n задач. Вычисление не может продолжаться без завершения этих n задач. Однако я обнаружил, что одна или несколько из этих n задач просто пропали после их добавления, и весь мой алгоритм останавливается посередине. Что может быть причиной ? Я держу переменную w для проверки того, сколько раз задача была добавлена. Соблюдаю w = n, хотя некоторые задачи не создавались.

def addtask_whx(index,user,seqlen,vp_compress,iseq_compress):
global w
while True :
    timeout_ms = 100    
    taskq_name = 'whx'+'--'+str(index[0])+'-'+str(index[1])+'-'+str(index[2])+'-'+str(index[3])+'-'+str(index[5]) + '--' + user

    try :

        taskqueue.add(name=taskq_name+str(timeout_ms),queue_name='whx',url='/whx', params={'m': index[0],'n': index[1],'o': index[2],'p': index[3],'q':0,'r':index[5],'user': user,'seqlen':seqlen,'vp':vp_compress,'iseq':iseq_compress})
        w = w+1
        break
    except DeadlineExceededError:
        taskq_name = taskq_name + str(timeout_ms)
        time.sleep(float(timeout_ms)/1000)
        timeout_ms = timeout_ms*4
        logging.error("WHX Task Queue Add Timeout Retrying")
    except TransientError:
        taskq_name = taskq_name + str(timeout_ms)
        time.sleep(float(timeout_ms)/1000)
        timeout_ms = timeout_ms*4
        logging.error("WHX Task Queue Add Transient Error Retrying")
    except TombstonedTaskError:
        logging.error("WHX Task Queue Tombstoned Error")
        break   
2
Sam 7 Апр 2011 в 19:43
1
Возможно, вы захотите опубликовать часть своего кода задачи. Этого, очевидно, не должно происходить, поэтому либо ваша задача завершается раньше, чем вы ожидаете, не вызывая исключения, либо вы обнаружили ошибку.
 – 
Chris Farmiloe
7 Апр 2011 в 20:34
Обычно, когда люди говорят, что задача не выполняется, это действительно так — она просто ничего не регистрирует, и они только просматривают журналы на уровне «информация» или выше. Вы уверены, что здесь не так? Вы установили средство просмотра журнала на «все запросы»?
 – 
Nick Johnson
8 Апр 2011 в 08:13
Я проверил журналы со «всеми запросами». Мне не хватает некоторых задач. Более того, я пишу объект хранилища данных, когда каждая задача завершается, и иногда я нахожу, что количество объектов хранилища данных меньше n.
 – 
Sam
9 Апр 2011 в 05:32

1 ответ

Отказ от ответственности: это не тот ответ, который вам нужен, но, тем не менее, я надеюсь, что он вам поможет.

Вычисление не может продолжаться без завершения этих n задач.

Похоже, вы используете очередь задач для чего-то, для чего она не предназначена. Вам следует прочитать: http://code.google.com/appengine /docs/java/taskqueue/overview.html#Queue_Concepts

Не гарантируется, что задачи будут выполняться в порядке поступления, и не гарантируется, что они будут выполняться ровно один раз. В некоторых случаях одна задача может выполняться несколько раз или вообще не выполняться. Кроме того, задача может быть отменена и повторно поставлена ​​в очередь по усмотрению App Engine на основе доступных ресурсов. Например, ваш timeout_ms = 100 очень низкий; если необходимо запустить новую JVM, что может занять несколько секунд, задачи n+1 и n+2 могут выполняться перед задачей n.

Короче говоря, очередь задач не является надежным механизмом для выполнения строго последовательных вычислений. Вы были предупреждены.

-tjw

1
Travis Webb 7 Апр 2011 в 22:36