Google App Engine Добавленная задача пропадает - PullRequest
2 голосов
/ 07 апреля 2011

Когда я добавляю задачу в очередь задач, иногда она пропадает.Я не получаю никаких ошибок, но я просто не нахожу задачи в своих журналах.Предположим, я добавил 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   

1 Ответ

1 голос
/ 07 апреля 2011

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

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

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

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

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

-tjw

...