Python oauth2client 异步

Python oauth2client async

我在和tornado和官方pythonoauth2client,gcloud...模块。

这些模块接受通过 http= 传递的备用 http 客户端,只要它有一个名为 request 的方法,可以被这些库中的任何一个调用,每当必须将 http 请求发送到 google and/or 以使用刷新令牌更新访问令牌时。

我创建了一个简单的 class,它有一个 self.client = AsyncHttpClient() 然后在它的 request 方法中, returns self.client.fetch(...)

我的目标是能够 yield 调用这些库中的任何一个,这样 tornado 将以 异步方式 .

执行它们

问题是它们高度依赖于默认客户端设置为 httplib2.Http() returns: (response, content)

我真的卡住了,找不到一种干净的方法来实现这种异步

如果有人找到了方法,请帮忙。

提前致谢

这些库不支持异步。移植过程并不总是那么容易。

oauth2client

取决于你想做什么,也许 Tornado's GoogleOAuth2Mixin or tornado-alf 就足够了。

gcloud

由于我不知道 gcloud-python 的任何 Tornado/asyncio 实现,因此您可以:

  • 你可以自己写。同样,这不是 Connection.httprequest 的简单传输更改,周围的所有东西都必须能够 use/yield future/coroutines.

  • 将其包装在 ThreadPoolExecutor 中(如@Apero 所述)。这是高级 API,因此该 yield 中的任何嵌套 api 调用都将在同一线程中执行(不使用池)。它可以很好地工作。

  • 外部应用程序(使用 ProcessPoolExecutorPopen)。

几年前当我在 AWS 上遇到类似问题时,我最终以异步方式执行 CLI(Tornado + subprocess.Popen + 一些 cli(awscli 或基于 boto))和简单案例(如 S3 , 基本 EC2 操作) 与普通 AsyncHTTPClient.