2010-04-22 48 views
0

我在决定如何提供几个Python脚本时遇到了相当多的问题。这个Python脚本的最佳(或适当的)WSGI服务器? - Python

的问题是,基本的功能可以通过此来概括:

do_something() 
time.sleep(3) 
do_something() 

我尝试过各种WSGI服务器,但他们都一直给我的并发限制,如我有指定要使用多少个线程等。

我只希望服务器上的资源得到有效和宽松的使用。



任何想法?

回答

1

您是否使用非阻塞异步请求检查了龙卷风?

http://www.tornadoweb.org/

我从来没有用过它虽然,但这里是从文档的例子:

class MainHandler(tornado.web.RequestHandler): 
    @tornado.web.asynchronous 
    def get(self): 
     http = tornado.httpclient.AsyncHTTPClient() 
     http.fetch("http://friendfeed-api.com/v2/feed/bret", 
        callback=self.async_callback(self.on_response)) 

    def on_response(self, response): 
     if response.error: raise tornado.web.HTTPError(500) 
     json = tornado.escape.json_decode(response.body) 
     self.write("Fetched " + str(len(json["entries"])) + " entries " 
        "from the FriendFeed API") 
     self.finish() 
+0

@hadrienL由于某种原因,它仅用于在同一时间1个请求:| – RadiantHex 2010-04-22 19:55:06

0

CherryPy WSGI服务器呢?

sleep是什么意思?你真的在写Web应用程序吗?

+0

@Messa:谢谢你的回复!睡眠意味着一秒钟脚本没有做任何事情3秒钟。我尝试了CherryPy WSGI服务器,但它需要我选择使用多少个线程,这是目前的主要限制。 – RadiantHex 2010-04-22 15:51:14

+0

对不起,我以为CherryPy的WSGI服务器管理的线程数动态,但现在我已经看过它的源代码,我不这么认为了:) – Messa 2010-04-22 19:41:13

1

您可能会发现Spawning一个不错的选择。它有几个部署选项,其中之一是有点透明的异步(由Eventlet执行)。所以,如果你字面上time.sleep(3)它会没事的。并非所有你可能做的都是透明处理,所以你必须注意Eventlet及其工作原理。例如,套接字是这样的,如果你从套接字读取(并且套接字块),它不会停止服务器或使用线程。但是,如果您执行CPU繁重的工作来阻止所有请求。所以...这有点棘手。产卵有一些其他的部署选项,可能也适合你。您可以使用WaitForIt,虽然它有一些问题。这将产生线程长期运行的请求,并提供了一些浏览器的反馈,因此,如果您要创建一个非常简单的前端到长期运行的后台处理它可能是有益的。它充当WSGI中间件。

0

因此,可以让客户端等待3秒钟的响应,但服务器却不行吗?这似乎...奇怪。

如果你宁愿不是让客户端连接了3秒钟,一个常见的机制是让初始请求ASAP返回“202 Accepted”并带有到状态监视器的URL。然后服务器可以为该任务产生一个新的线程或子进程,并且客户端可以执行其他操作,然后轮询状态URL以查明任务何时完成。

相关问题