cherrypy.process.servers模块

从CherryPy3.1开始,cherryPy.server实现为 Engine Plugin .这是一个例子 cherrypy._cpserver.Server ,它是 cherrypy.process.servers.ServerAdapter . 这个 ServerAdapter 类也设计为控制其他服务器。

多个服务器/端口

如果需要启动多个HTTP服务器(在多个端口或协议等上提供服务),可以手动注册每个服务器,然后使用引擎启动所有服务器。启动::

s1 = ServerAdapter(
    cherrypy.engine,
    MyWSGIServer(host='0.0.0.0', port=80)
)
s2 = ServerAdapter(
    cherrypy.engine,
    another.HTTPServer(host='127.0.0.1', SSL=True)
)
s1.subscribe()
s2.subscribe()
cherrypy.engine.start()

快速CGI/SCGI

还有绒毛F cgiserver和flupS 中的CGIServer类 cherrypy.process.servers .例如,要启动fcgi服务器,请将其实例包装在ServerAdapter中:

addr = ('0.0.0.0', 4000)
f = servers.FlupFCGIServer(application=cherrypy.tree, bindAddress=addr)
s = servers.ServerAdapter(cherrypy.engine, httpserver=f, bind_addr=addr)
s.subscribe()

这个 cherryd 启动脚本将通过 -f flag. Note that you need to download and install flup 你自己,不管你用什么 cherryd 或者没有。

FASTCGI

一个非常简单的设置可以让你的樱桃运行与fastcgi。您只需要flup库,外加一个运行中的apache服务器 mod_fastcgi )或LightTPD服务器。

奇瑞码

你好,Py::

#!/usr/bin/python
import cherrypy

class HelloWorld:
    '''Sample request handler class.'''
    @cherrypy.expose
    def index(self):
        return "Hello world!"

cherrypy.tree.mount(HelloWorld())
# CherryPy autoreload must be disabled for the flup server to work
cherrypy.config.update({'engine.autoreload.on':False})

然后运行 /deployguide/cherryd 带有“-f”参数:

cherryd -c <myconfig> -d -f -i hello.py

阿帕奇

在httpd.conf的顶层:

FastCgiIpcDir /tmp
FastCgiServer /path/to/cherry.fcgi -idle-timeout 120 -processes 4

在相关的virtualhost部分中:

# FastCGI config
AddHandler fastcgi-script .fcgi
ScriptAliasMatch (.*$) /path/to/cherry.fcgi$1

轻TPD

为了 Lighttpd 您可以按照这些说明操作。在 lighttpd.conf 确保 mod_fastcgi 在中处于活动状态 server.modules .然后,在你的 $HTTP["host"] 指令,按如下方式配置fastcgi脚本:

$HTTP["url"] =~ "" {
  fastcgi.server = (
    "/" => (
      "script.fcgi" => (
        "bin-path" => "/path/to/your/script.fcgi",
        "socket"          => "/tmp/script.sock",
        "check-local"     => "disable",
        "disable-time"    => 1,
        "min-procs"       => 1,
        "max-procs"       => 1, # adjust as needed
      ),
    ),
  )
} # end of $HTTP["url"] =~ "^/"

请看 Lighttpd FastCGI Docs 有关可能的配置选项的说明。

class cherrypy.process.servers.FlupCGIServer(*args, **kwargs)[源代码]

基类:object

flup.server.cgi.wsgiserver的适配器。

start()[源代码]

启动CGI服务器。

stop()[源代码]

停止HTTP服务器。

class cherrypy.process.servers.FlupFCGIServer(*args, **kwargs)[源代码]

基类:object

flup.server.fcgi.wsgiserver的适配器。

start()[源代码]

启动fcgi服务器。

stop()[源代码]

停止HTTP服务器。

class cherrypy.process.servers.FlupSCGIServer(*args, **kwargs)[源代码]

基类:object

flup.server.scgi.wsgiserver的适配器。

start()[源代码]

启动SCGi服务器。

stop()[源代码]

停止HTTP服务器。

class cherrypy.process.servers.ServerAdapter(bus, httpserver=None, bind_addr=None)[源代码]

基类:object

HTTP服务器的适配器。

如果需要启动多个HTTP服务器(在多个端口或协议等上提供服务),可以手动注册每个服务器,然后使用总线启动所有服务器。启动::

s1 = ServerAdapter(bus, MyWSGIServer(host='0.0.0.0', port=80))
s2 = ServerAdapter(bus, another.HTTPServer(host='127.0.0.1', SSL=True))
s1.subscribe()
s2.subscribe()
bus.start()
_get_base()[源代码]
_start_http_thread()[源代码]

HTTP服务器必须在新的线程中运行,这样主线程才能持久地接收KeyboardInterrupt线程。如果在httpserver的线程中引发异常,那么它就会被困在这里,总线(以及我们的httpserver)也会关闭。

property bound_addr

绑定地址,或者如果它是一个临时端口并且套接字已经绑定,则返回实际绑定的端口。

property description

有关此服务器绑定位置的说明。

restart()[源代码]

重新启动HTTP服务器。

start()[源代码]

启动HTTP服务器。

stop()[源代码]

停止HTTP服务器。

subscribe()[源代码]
unsubscribe()[源代码]
wait()[源代码]

等待HTTP服务器准备好接收请求。

class cherrypy.process.servers.Timeouts[源代码]

基类:object

free = 1
occupied = 5
cherrypy.process.servers._safe_wait(host, port)[源代码]

在环回接口不可用且服务器绑定到所有接口的系统上,很难确定服务器是否确实占用了端口。在这种情况下,只要发出警告就可以了。请参阅1100期。