Когда я добавляю задачу в очередь задач, иногда задача пропадает. Я не получаю никаких ошибок, но я просто не нахожу задачи в своих журналах. Предположим, я добавляю 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 ответ
Отказ от ответственности: это не тот ответ, который вам нужен, но, тем не менее, я надеюсь, что он вам поможет.
Вычисление не может продолжаться без завершения этих 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
Похожие вопросы
Новые вопросы
google-app-engine
Google App Engine - это технология облачных вычислений для размещения веб-приложений в управляемых Google центрах обработки данных. Google App Engine - это платформа как услуга (PaaS), предлагающая Java, Python, Go, Node.js и PHP в стандартной среде. Среда выполнения для нескольких других языков, а также настраиваемые среды выполнения на основе докера поддерживаются в его гибкой среде.