使用Circus运行uWSGI实例

Circus (https://circus.readthedocs.io/en/0.7/)是一个用Python写的进程管理器。它非常类似于像Supervisor这样的工程,但具有一些额外特性。虽然大部分,主要的功能在uWSGI中都能找到对应的,但是Circus可以被当成一个库使用,让你可以构建动态配置 (并且扩展uWSGI模式)。这个部分是非常重要的,并且可能就是Circus的真正卖点。

Socket激活

基于古老的inetd模式,Circu可以绑定到socket,并且将其传递给它的孩子。

从一个简单的Circus配置开始 (称之为circus.ini):

[circus]
endpoint = tcp://127.0.0.1:5555
pubsub_endpoint = tcp://127.0.0.1:5556
stats_endpoint = tcp://127.0.0.1:5557

[watcher:dummy]
cmd = uwsgi --http-socket fd://$(circus.sockets.foo) --wsgi-file yourapp.wsgi
use_sockets = True
send_hup = True
stop_signal = QUIT

[socket:foo]
host = 0.0.0.0
port = 8888

这样运行它

circusd circus.ini

(更好的) Socket激活

如果你想按需生成实例,那么你可能会想要在不再使用它们的时候将其关闭。要实现这点,则使用–idle uWSGI选项。

[circus]
check_delay = 5
endpoint = tcp://127.0.0.1:5555
pubsub_endpoint = tcp://127.0.0.1:5556
stats_endpoint = tcp://127.0.0.1:5557

[watcher:dummy]
cmd = uwsgi --master --idle 60 --http-socket fd://$(circus.sockets.foo) --wsgi-file yourapp.wsgi
use_sockets = True
warmup_delay = 0
send_hup = True
stop_signal = QUIT

[socket:foo]
host = 0.0.0.0
port = 8888

这一次,我们启用了master进程。它将会管理–idle选项,在实例不活跃时间超过60秒的时候关闭它。