2

タスクをタスク キューに追加すると、タスクが見つからないことがあります。エラーは発生しませんが、ログにタスクが見つかりません。n 個のタスクを追加するとします。これらの n 個のタスクが終了しないと、計算を進めることはできません。ただし、これらの n 個のタスクの 1 つ以上が追加された後に行方不明になり、アルゴリズム全体が途中で停止することがわかりました。何が原因でしょうか? タスクが追加された回数を確認する変数 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   
4

1 に答える 1

1

免責事項:これはあなたが探している答えではありませんが、それでもあなたの助けになることを願っています.

これらの n 個のタスクが終了しないと、計算を進めることはできません

設計されていない目的でタスク キューを使用しているようです。読む必要があります: http://code.google.com/appengine/docs/java/taskqueue/overview.html#Queue_Concepts

タスクは到着順に実行される保証はなく、一度だけ実行される保証もありません。場合によっては、1 つのタスクが複数回実行されるか、まったく実行されないことがあります。さらに、使用可能なリソースに基づいて、App Engine の裁量でタスクをキャンセルして再度キューに入れることができます。たとえば、あなたtimeout_ms = 100は非常に低いです。新しい JVM を開始する必要がある場合 (数秒かかる場合があります)、タスク n+1 および n+2 がタスク n の前に実行される可能性があります。

つまり、タスク キューは、厳密に順次計算を実行するための信頼できるメカニズムではありません。あなたは警告されました。

-tjw

于 2011-04-07T18:30:54.170 に答える