アプリエンジン:Time.Sleep()は私のクォータに向かってカウントされていますか?

StackOverflow https://stackoverflow.com/questions/4254678

質問

おい。 Google Maps APIへのクエリを含むアプリエンジンアプリに取り組んでいます。 Googleマップはあまりにも多くのリクエストが好きではないので、各リクエストの間に1秒の遅延を置きます time.sleep(1).

私の割り当てが私のGaeダッシュボードで低いことに気付き、短いテストを実行することにしました:

import cProfile
import time

def foo():
    time.sleep(3)

cProfile.run('foo()')

これにより、次の出力が与えられました。

   4 function calls in 3.003 CPU seconds
   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    3.003    3.003 <stdin>:1(foo)
        1    0.000    0.000    3.003    3.003 <string>:1(<module>)
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
        1    3.003    3.003    3.003    3.003 {time.sleep}

だから、それは3 cpu秒を消費していると言っています time.sleep(3). 。今、私はこのような呼び出しがGAEが提供する割り当て制限にカウントされるかどうか疑問に思っています。もしそうなら、ジオコーディングのAPI呼び出しの間に遅延を行う他の方法は何ですか?

ありがとう。

役に立ちましたか?

解決

あなたは確かに、可能な限り短い時間でリクエストを完了するために完全に設計されたシステムで眠ろうとしたくない:D

代わりにできることは、各ジオコードのタスクを作成することです(チェックしてください 繰延ライブラリ)。このタスクのキューを指定してから、キューのレート制限を、GeoCoderが快適であると感じるものに設定するだけです。

これにより、すべてのジオコードが実行され、設定したレート制限よりも速くなることはなく、配管を行う必要はありません。

他のヒント

キュータスクは、ギャップでのCPU使用にもカウントされることをかなり確信しています。それにかんする sleep(), 、私はそれからCPUの「ペナルティ」があるとは思わないが、それは悪いスタイルだと思う。

なぜまったく眠るのですか?あなたのタスクでは、単一のジオコーディングを行い、3秒のキューに自分自身への別の呼び出しを投稿するだけです。パラメーターを参照してください countdown 呼び出すとき http://code.google.com/intl/el/appengine/docs/python/taskqueue/functions.html#dd .

あなたの実験は、時間があなたのクォータに対してカウントされることを証明します。実験を見てください タスクキューAPI. 。タスクがユーザーが開始されていない場合は、使用することもできます クロン タスクですが、これが非常に小さな間隔でうまく機能するかどうかはわかりません。

これ 問題 レポーターは、time.sleep()で発生したCPU秒間請求されていないが、彼らが彼らのappstatに現れると報告しています。 AppStatsもCProfileを使用している可能性が非常に高いです。睡眠は、より大きなアイテムのセットをジオコードするために使用できるより良い非同期プロキシを作ろうとする人々にとって重要です。

http://code.google.com/p/googleappengine/issues/detail?id=3291

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top