python - 最好的高并发Python/Redis服务器

标签 python performance redis bottle

<分区>

我正在制作基于 Python/Redis 的 API 原型(prototype),并使用 Bottle 提供 JSON,但不幸的是,开箱即用的 Bottle 在负载和高并发性下表现不佳。对真实流量的一些初始测试导致 python 脚本崩溃但没有终止,这意味着 API 没有响应并且没有重新启动*。

目前在性能和文档方面扩展 Python/Redis API 的最佳解决方案是什么。我发现 bottle+greenlet 解决方案的文档很少,而且对于像我这样的 Python 初学者来说实现起来并不容易。我听说 tornado 不错,但它与 Redis 的集成比 Bottle 慢。

*似乎当 bottle 无法将 HTTP 请求的主体发送到客户端时,服务器会出现“[Errno 32] Broken pipe”错误,这似乎是服务器停止工作的一个糟糕理由

最佳答案

您是否已阅读 Bottle docs关于这个主题?

Bottle 在重负载下表现非常好——我用它每天处理数百万个请求——但如果你需要并发或高性能,你一定不要使用它的默认 HTTP 服务器。 (默认情况下,Bottle 仅使用 wsgiref.WSGIServer,它是单线程的,不适用于任何高性能应用程序。)

在生产中,我使用 mod_wsgi 在 Apache 中运行 Bottle . (其中的 Here's an example。)扩展性非常好; Bottle 本身增加的开销可以忽略不计。

换句话说:你的性能瓶颈不是Bottle造成的,而是你的HTTP服务器造成的。选择可扩展的服务器,您会看到更好的性能。

希望对您有所帮助!


编辑 2015

我发现 Bottle 有其局限性,并且为了获得更高的并发性(每个内核数千 QPS),Bottle 不会这样做。 (瓶颈似乎是 Bottle 使用线程本地存储和 gevent 的 TLS 实现之间的交互。)我没有使用 falcon,它在高负载下的性能比 Bottle 好得多。

关于python - 最好的高并发Python/Redis服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19784948/

相关文章:

VS 上的 sql INNER JOIN 表变量。内部连接(选择)开启

推荐使用相同索引向量对两个向量进行子集化的方法

带密码的redis-cli

python - FTP 上传文件手动工作,但使用 Python ftplib 失败

java - 仅使用 Android View.onDraw() 进行绘图更改

python - cursor.fetchone() 返回 None 但数据库中的行存在

Redis.conf for slave with sentinel

Azure Redis 缓存授权 header

python - 使用多列同时将字典映射到数据框

python - 在特定点移动名称中具有一位或两位数字的文件