此Python脚本的最佳(或适当)WSGI服务器python

此Python脚本的最佳(或适当)WSGI服务器python,python,concurrency,mod-wsgi,wsgi,cherrypy,Python,Concurrency,Mod Wsgi,Wsgi,Cherrypy,我在决定如何为一些Python脚本提供服务时遇到了很大的问题 问题在于,基本功能可以通过以下方式概括: do_something() time.sleep(3) do_something() 我尝试了各种WSGI服务器,但它们都给了我并发限制,比如我必须指定要使用多少线程等等 我只希望服务器上的资源得到有效和自由的利用 有什么想法吗?CherryPy WSGI服务器呢 那是什么意思?您真的在编写web应用程序吗?您是否检查过tornado及其非阻塞异步请求 虽然我从未使用过,但下面是d

我在决定如何为一些Python脚本提供服务时遇到了很大的问题

问题在于,基本功能可以通过以下方式概括:

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

我尝试了各种WSGI服务器,但它们都给了我并发限制,比如我必须指定要使用多少线程等等

我只希望服务器上的资源得到有效和自由的利用




有什么想法吗?

CherryPy WSGI服务器呢


那是什么意思?您真的在编写web应用程序吗?

您是否检查过tornado及其非阻塞异步请求

虽然我从未使用过,但下面是doc的一个示例:

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()
你可能会找到一个合适的。它有几个部署选项,其中一个是透明的异步(由实现)。所以,如果你真的去做《时间·睡眠》(3),一切都会好起来的。并非所有您可能做的事情都是透明处理的,因此您必须关注Eventlet及其工作方式。例如,socket是,因此如果您从一个socket(并且该socket阻塞)读取数据,它就不会停止服务器或消耗线程。但如果您执行CPU繁重的工作,将阻止所有请求。所以这有点棘手。产卵还有一些其他的部署选项,可能也适合您


您可能可以使用,尽管它有一些缺陷。它将为长时间运行的请求生成线程,并提供一些浏览器反馈,因此,如果您要创建一个非常简单的前端到长时间运行的后端进程,它可能会很有用。它充当WSGI中间件。

因此,客户机可以等待3秒钟的回答,但服务器不可以?这似乎…很奇怪


如果您不想让客户端占用3秒钟,一种常见的机制是让初始请求尽快返回“202 Accepted”,并向状态监视器发送URL。然后,服务器可以为任务生成新线程或子进程,客户端可以执行其他操作,然后轮询状态URL以了解任务何时完成。

@Messa:谢谢您的回复!睡眠意味着脚本有一秒钟在3秒钟内没有做任何事情。我尝试了CherryPy WSGI服务器,但它要求我选择要使用的线程数,这是目前的主要限制。对不起,我认为CherryPy WSGI服务器动态管理线程数,但我现在查看了它的源代码,我不再这么认为:)@Hadrinel出于某种原因,它一次只提供一个请求:|