我有一个公开某些API的网络服务。我想在两个应用程序中使用此API,一个是命令行工具,另一个是Web服务器本身。
对于网络服务器,我使用的是Python龙卷风,所以我可以使用AyncHttpClient
,gen.coroutine
等。但对于CLI,我不能使用龙卷风,因为它需要一个IOLoop正在运行异步工作。
我希望创建一种与API对话的库,并在CLI和Web服务中重用此库。这意味着我应该能够在其函数之上编写(可能是tornado gen)代码以使其异步。
答案 0 :(得分:1)
为什么不在CLI工具中使用IOLoop?
@gen.coroutine
def main():
client = AsyncHTTPClient()
response = yield client.fetch('http://www.google.com')
if __name__ == '__main__':
IOLoop.instance().run_sync(main)
还有同步tornado.httpclient.HTTPClient
,它使用与AsyncHTTPClient
相同的请求和响应对象。
如果您想与HTTP客户端无关,那么您需要遵循oauthlib的示例。提供一个基于HTTP头和响应主体的基本客户端,并单独提供从该客户端到各种实现(如requests-oauthlib)的绑定。 (或者只是释放基本客户端,并期望你的调用者找出映射到他们自己的HTTP实现)