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.http
或 request
的简单传输更改,周围的所有东西都必须能够 use/yield future/coroutines.
将其包装在 ThreadPoolExecutor
中(如@Apero 所述)。这是高级 API,因此该 yield 中的任何嵌套 api 调用都将在同一线程中执行(不使用池)。它可以很好地工作。
外部应用程序(使用 ProcessPoolExecutor
或 Popen
)。
几年前当我在 AWS 上遇到类似问题时,我最终以异步方式执行 CLI(Tornado + subprocess.Popen + 一些 cli(awscli 或基于 boto))和简单案例(如 S3 , 基本 EC2 操作) 与普通 AsyncHTTPClient.
我在和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.http
或request
的简单传输更改,周围的所有东西都必须能够 use/yield future/coroutines.将其包装在
ThreadPoolExecutor
中(如@Apero 所述)。这是高级 API,因此该 yield 中的任何嵌套 api 调用都将在同一线程中执行(不使用池)。它可以很好地工作。外部应用程序(使用
ProcessPoolExecutor
或Popen
)。
几年前当我在 AWS 上遇到类似问题时,我最终以异步方式执行 CLI(Tornado + subprocess.Popen + 一些 cli(awscli 或基于 boto))和简单案例(如 S3 , 基本 EC2 操作) 与普通 AsyncHTTPClient.