2012-01-10 50 views
3

我想评估各种语言来构建一个小型高吞吐量应用程序服务器。它需要做一些小的事情,例如获取请求,从运行缓存应用程序的单独服务器(memcached,redis)读取数据,并发回5至10行XML或JSON。非常高的吞吐量~1000每秒生产至少。我在Nginx上有这个--PHP和memcached需要5+毫秒才能发回所有需要的数据,所以有一些网络IO阻塞。Python ThreadingMixin和BaseHTTPServer

我在看Python的BaseHTTPServer类。我不是一个蟒蛇大师,但我需要知道它是如何在幕后工作的。如果您阅读此页 -

http://docs.python.org/library/socketserver.html

它说:“要建立异步处理程序,使用ThreadingMixIn和ForkingMixIn班”。

它真的是异步的,还是它启动一个线程每客户端。如果它在每个客户端模型的一个线程上 - 是这些OS级别的线程?如果我坚持每个客户端模型的一个线程,Python的GC清除速度足够快,如果我给它高RAM,8核心的亚马逊实例。

回答

3

ForkingMixIn就像你在源代码中看到的那样,做了一个真正的分支。 ThreadingMixIn使用Python线程。所以你必须处理GIL,这意味着即使它使用底层的os-threading机制,也不会对你的python线程进行并发处理。我不会推荐它用于高吞吐量服务器。

所以简而言之:没有,它们不是根据您的定义异步。如果你想要“真正的”异步(一个核心/进程/线程)功能,你应该看看:TwistedTornado或者Gunicorn。后者可能不符合你的异步定义。

我建议与nginx一起使用torndado。有关于如何设置的帖子in google groups。由于内部Tornado服务器没有实施所有标准,因此可以使用“真实”服务器作为代理。

+0

太好了。做了一些研究。如果您处于这种情况,您会使用哪种技术?我需要将那个Nginx PHP移植到别的东西上。一些内置HTTP服务器的持久应用程序。 – 2012-01-10 14:49:20

+0

独立Py应用程序或Nginx中的Tornado?这个基准显示Nginx + Tornado每秒造成8000+。 http://en.wikipedia.org/wiki/Tornado_%28web_server%29 – 2012-01-10 16:56:44

+0

@Don问题:ThreadingMixin正在使用threading.thread,它是AFAIK一个os级别的线程,在这种情况下它不处理GIL。这将使threadingmixin成为OP的理想选择。 – 2015-01-22 18:56:40

相关问题