1

私は竜巻と公式の python oauth2clientgcloud ... モジュールと戦っています。

これらのモジュールは、http リクエストを Google に送信する必要があるとき、および/または更新を使用してアクセス トークンを更新する必要があるときはいつでも、これらのライブラリのいずれかによって呼び出すことができるメソッドが呼び出される限り、http= で渡された代替 http クライアントを受け入れますrequest。トークン。

メソッドにself.client = AsyncHttpClient() Then が含まれている単純なクラスを作成しました。requestself.client.fetch(...)

私の目標は、トルネードがそれらを非同期yieldで実行できるように、これらのライブラリ呼び出しのいずれかを実行できるようにすることです。

問題は、デフォルトのクライアント (httplib2.Http() に設定) が返すものに大きく依存していることです: (応答、コンテンツ)

私は本当に立ち往生しており、これを非同期にするきれいな方法を見つけることができません

誰かがすでに方法を見つけた場合は、助けてください。

前もって感謝します

4

1 に答える 1

2

これらのライブラリは非同期をサポートしていません。移植プロセスは必ずしも容易ではありません。

oauth2client

やりたいことによっては、Tornado'sGoogleOAuth2Mixinまたはtornado-alfで十分でしょう。

gcloud

の Tornado/asyncio 実装を認識していないため、次のgcloud-pythonことができます。

  • あなたはそれを自分で書くかもしれません。繰り返しますが、Connection.httporの単純なトランスポート変更でrequestはありません。周囲のすべてのものは、フューチャー/コルーチンを使用/生成できる必要があります。

  • それをラップしますThreadPoolExecutor(@Aperoが述べたように)。これは高レベル API であるため、その中でネストされた API 呼び出しはすべて同じスレッドで (プールを使用せずに) 実行されます。それはうまくいくかもしれません。

  • 外部アプリ (ProcessPoolExecutorまたはPopen)。

数年前にAWSで同様の問題が発生したとき、非同期でCLI(Tornado + subprocess.Popen +いくつかのcli(awscli、またはbotoベース))と単純なケース(S3、基本的なEC2操作など)を実行することになりましたプレーンな AsyncHTTPClient を使用します。

于 2016-03-14T20:24:23.820 に答える