Python oauth2client 异步

标签 python asynchronous tornado oauth2client google-cloud-python

我正在与tornado和官方python oauth2clientgcloud...模块进行斗争。

这些模块接受通过 http= 传递的备用 http 客户端,只要它有一个名为 request 的方法,无论何时,任何这些库都可以调用该方法。必须将 http 请求发送到 Google 和/或使用刷新 token 更新访问 token 。

我创建了一个简单的类,其中有一个 self.client = AsyncHttpClient() 然后在其 request 方法中,返回 self.client.fetch(...)

我的目标是能够产生任何这些库调用,以便tornado能够异步执行它们。

问题是它们高度依赖于默认客户端设置为 httplib2.Http() 返回的内容:(响应,内容)

我真的陷入困境,无法找到一种干净的方法来实现异步

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

提前谢谢

最佳答案

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

oauth2client

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

gcloud

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

  • 你可以自己写。同样,这不是 Connection.httprequest 的简单传输更改,周围的所有内容都必须能够使用/产生 future /协程。

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

  • 外部应用(使用 ProcessPoolExecutorPopen)。

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

关于Python oauth2client 异步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35996377/

相关文章:

python Tornado - 如何返回实时数据

python - 将 python 子进程作业的输出获取到 Tornado 中

python - flask 中的 "TypeError: ' bool 值 ' object is not callable"

python - 为什么 tkinter 中 widget.winfo_rootx() 和 widget.winfo_rootx() 总是 0?

python - 用 OrderedDict 替换对象的默认 __dict__

asynchronous - Tornado 调用回调函数不等待结果

javascript - 在 ajax 更新期间离开网页

python - 没有名为 _backend_gdk 的模块

c# - 是否可以从 TPL Task 派生以从方法返回更多详细信息?

python - 在远程服务器中执行 Hadoop 作业并从 python webservice 获取结果