从Python消费REST API:我需要异步库吗?

1 投票
3 回答
3194 浏览
提问于 2025-04-18 06:32

我有一个REST API,现在我想创建一个网站,这个网站将只使用这个API作为主要的数据来源。这个系统是分布式的:REST API在一组机器上,而网站则在另一组机器上。

我预计会有相当大的访问量,所以我想让请求尽可能高效。

我需要使用一些异步的HTTP请求库,还是说任何HTTP客户端库都可以?

API是用Flask做的,网站也将使用Flask和Jinja作为模板引擎来构建。

3 个回答

0

其实你的API是在另一台机器上。即使你让客户端的请求变成异步的,也不会对服务器产生任何影响。通过让请求异步,你的客户端线程就不会等待服务器的响应。无论是同步请求还是异步请求,服务器的反应都是一样的。

如果你想让请求变成异步的,可以查看一下这个链接:http://stackandqueue.com/?p=57。这个链接使用了unirest来进行异步的GET和POST请求。

1

先从简单的开始,选择对你来说容易上手的方法。优化的事情可以等到需要的时候再考虑。

如果你每秒有成千上万的请求,使用异步库会很有帮助。不过,更早的时候,你可能会遇到和数据库相关的性能问题(如果你在用数据库的话),这些问题是异步处理无法解决的。

2

你可以使用geventFlask,这样就能让一些通常是同步的库实现异步输入输出。想看看具体的例子,可以参考这个问题,里面有人分享了如何做到这一点。

另外,你也可以把Flask放在gunicorn后面运行,gunicorn支持启动多个工作进程(线程、进程或绿色线程)来处理同时的请求。如果你选择这种方式,Flask依然是完全同步的,而gunicorn会负责创建多个Flask实例来处理这些并发请求。

撰写回答