我正在与龙卷风和官方蟒蛇oauth2client,gcloud.模块。
这些模块接受与http=一起传递的另一个http客户端,只要它有一个名为request的方法,该方法可以由这些库中的任何一个库调用,只要http请求必须发送到谷歌和/或使用刷新令牌更新访问令牌。
我创建了一个具有self.client = AsyncHttpClient()的简单类,然后在它的request方法中返回self.client.fetch(...)
我的目标是能够对任何这些库调用进行yield,这样龙卷风就可以在yield中执行它们。
问题是,它们高度依赖于将默认客户端设置为httplib2.Http()返回的内容:(响应,内容)
我真的被困住了,找不到一种干净的方法来完成这个异步。
如果有人已经找到办法,请帮忙。
提前谢谢你
发布于 2016-03-14 20:24:23
这些库不支持异步。移植过程并不总是容易的。
oauth2client
取决于您想要做什么,也许GoogleOAuth2Mixin或龙卷风-阿尔夫就足够了。
gcloud
由于我不知道gcloud-python的任何旋风/异步实现,所以您可以:
Connection.http或request的简单传输变化,周围的所有东西都必须能够使用/产生未来/协同。ThreadPoolExecutor包起来(正如@Apero提到的那样)。这是高级别的API,因此在该结果中的任何嵌套api调用都将在同一个线程中执行(而不是使用池)。可能会很好的。ProcessPoolExecutor或Popen)。几年前,当我遇到类似的AWS问题时,我已经异步地执行了CLI (龙卷风+ subprocess.Popen +一些cli (awscli,或基于boto的))和简单的情况(比如S3,基本EC2操作)和普通AsyncHTTPClient。
https://stackoverflow.com/questions/35996377
复制相似问题