0

このコードを使用して、機能テストの一部としてタスクを問題なく実行できます。

def run_tasks():
    taskq = apiproxy_stub_map.apiproxy.GetStub('taskqueue')
    tasks = taskq.GetTasks("default")
    taskq.FlushQueue("default")
    try:
        while tasks:
            for task in tasks:
                url, body, headers, method = task["url"], \
                                             base64.b64decode(task["body"]), \
                                             task["headers"], \
                                             task["method"]
                try:
                    res = Request.blank(url,
                                        body=body,
                                        headers=headers,
                                        method=method).get_response(wsgi_app)
                    if res.status_int != 200:
                        log.error("%s\n%s" % (url, str(res)))
                except Exception:
                    log.error(url, exc_info=True)

            tasks = taskq.GetTasks("default")
            taskq.FlushQueue("default")
    finally:
        pass

ただし、パイプラインタスクはここで次のメッセージで爆破されます

"試行1でパイプラインID"[someid] "の評価タスクを受信しました。''これは次の日まで準備ができていません:[将来]"

関連する情報源はこちらです。

+++ b/src/pipeline/pipeline/pipeline.py Wed Apr 04 20:01:12 2012 -0400
@@ -1946,6 +1952,7 @@
     if pipeline_record.next_retry_time is not None:
       retry_time = pipeline_record.next_retry_time - _RETRY_WIGGLE_TIMEDELTA
       if self._gettime() <= retry_time:
+        # error under unit tests
         detail_message = (
             'Received evaluation task for pipeline ID "%s" on attempt %d, '
             'which will not be ready until: %s' % (pipeline_key.name(),

テストスイートでappengineapiを表示するコードでモンキーパッチ_RETRY_WIGGLE_TIMEDELTAを考えましたが、それだけでは不十分なようです。

時間になるまで待つことなく、テストスイートの実行が非常に遅くなるコードでは、途方に暮れています。

何か案は?

4

1 に答える 1

0

さて私は問題を誤診しました。タスクが失敗し、そのロジックが再試行ロジックです。それがパイプラインAPIで強制されるのはちょっと奇妙ですが、それには十分な理由があると確信しています。したがって、処理タスクのループのどこかで、再試行回数を確認し、何らかの方法でそれらをキューから取り出してから、最初の実行から取得したすべてのエラー情報を上げて、テストが失敗したと見なす必要があります。

于 2012-04-06T16:00:23.103 に答える