14

私たちは、Pythonデータ2.15ライブラリを備えた開発者向けPythonガイドを使用しており、例としてアプリエンジンについて説明しています。createSite( "テストサイト1"、description = "テストサイト1"、source_site =( " https://sites.google.com/feeds/site/googleappsforus.com/google-site-template "))

使用するたびに、予測できない応答が発生します。

例外: HTTPException:URLからのHTTP応答を待機中に期限を超えました: https ://sites.google.com/feeds/site/googleappsforyou.com

誰かが同じ問題を経験しましたか?AppEngineまたはSitesAPIに関連していますか?

よろしく、

4

2 に答える 2

34

URLからのHTTP応答を待っている間に期限を超えたのは、実際にはDeadlineExceededErrorです。HTTPリクエストを行う場合、AppEngineはこのリクエストをURLFetchにマッピングします。URLFetchには、構成可能な独自の期限があります。URLFetchのドキュメントを参照してください。

クライアントライブラリがDeadlineExceededErrorをキャッチし、HTTPExceptionをスローしているようです。クライアントライブラリが期限をURLFetchに渡すか(変更する必要があります)、デフォルトの期限がリクエストに対して不十分です。

次のようにデフォルトのURLFetch期限を設定してみてください。

from google.appengine.api import urlfetch
urlfetch.set_default_fetch_deadline(45)

また、公式ドキュメントのDeadlineExceededErrorsへの対処も確認してください。

エンドユーザーが開始したリクエストは60秒以内に完了する必要があります。そうしないと、DeadlineExceededErrorが発生します。AppEngineのPythonランタイムリクエストタイマーをご覧ください。

于 2013-02-05T01:25:26.493 に答える
9

httplib2の最新バージョンを使用した場合、受け入れられたソリューションは機能しませんでしたgoogleapiclient。問題は、httplib2.Httpタイムアウト引数をに渡してしまうことのようurlfetchです。デフォルト値は。であるため、。Noneで設定したurlfetchデフォルトに関係なく、そのリクエストの制限を5秒に設定しurlfetch.set_default_fetch_deadlineます。いくつかの選択肢があるようです。

最初のオプション-次のインスタンスを明示的に渡すことができますhttplib2.Http

http = httplib2.Http(timeout=30)
...
client.method().execute(http=http)

2番目のオプションでは、ソケット1を使用してデフォルト値を設定できます。

import socket
socket.setdefaulttimeout(30)

3番目のオプションでは、リクエストにソケットを使用するようにappengineに指示できます2。これを行うには、次を変更app.yamlします。

env_variables:
   GAE_USE_SOCKETS_HTTPLIB : 'anyvalue'

1ソケットAPIは無料アプリには存在しない可能性があるため、これは有料アプリでのみ機能する可能性があります...
2ソケットAPIは無料アプリでは機能しないため、これは有料アプリでのみ機能することはほぼ間違いありません...

于 2015-11-19T23:03:07.700 に答える