6

私はGAEでpython27を使用しており、アプリの応答時間を短縮しようとしています。

cProfileによると、160万の関数呼び出しを実行するのに40秒(明らかに長すぎる)かかります(非常に高いようです)。私が今見つけることができる唯一の手がかりは、「{method'acquire'of'thread.lock'objects}」が40のうちの20を取るということです。(注:app.yamlでthreadsafeをfalseまたはtrueに設定しても、あまり効果がないようです。)

私がどこで間違っているのか、次にどこを調査するのかについて何か考えはありますか?ロックの取得にかかる時間が原因ではなく単なる症状である可能性があることは承知していますが、その場合、根本的な原因を特定するにはどうすればよいですか?他のすべての時間とcProfileの私の関数にリストされているncallsは妥当なようです。

また、2011年末にGAEが2.7で抱えていたパフォーマンスの問題が原因であるのではないかと思います。

参考までに、cProfile出力の例(行を削除)を次に示します。

Profile data:
1662549 function calls (1652247 primitive calls) in 39.545 seconds
Ordered by: cumulative time
ncalls  tottime  percall  cumtime  percall filename:lineno(function)
[lines removed]
10816   19.245    0.002   19.245    0.002 {method 'acquire' of 'thread.lock' objects}
[lines removed]

あなたが提供できるどんな助けにも前もって感謝します!

4

1 に答える 1

2

アプリケーションの RPC 負荷が非常に高い (datastore/urlfetch/etc への長い呼び出しを行う) 場合、thread.lock.acquire() での待機に多くの時間が費やされることに気付くでしょう。

アプリケーションでAppStatsを有効にして、各 rpc にかかる時間を確認することができます。

于 2012-04-22T23:39:01.537 に答える