使用Circus运行uWSGI实例

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

Socket激活

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

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

  1. [circus]
  2. endpoint = tcp://127.0.0.1:5555
  3. pubsub_endpoint = tcp://127.0.0.1:5556
  4. stats_endpoint = tcp://127.0.0.1:5557
  5.  
  6. [watcher:dummy]
  7. cmd = uwsgi --http-socket fd://$(circus.sockets.foo) --wsgi-file yourapp.wsgi
  8. use_sockets = True
  9. send_hup = True
  10. stop_signal = QUIT
  11.  
  12. [socket:foo]
  13. host = 0.0.0.0
  14. port = 8888

这样运行它

  1. circusd circus.ini

(更好的) Socket激活

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

  1. [circus]
  2. check_delay = 5
  3. endpoint = tcp://127.0.0.1:5555
  4. pubsub_endpoint = tcp://127.0.0.1:5556
  5. stats_endpoint = tcp://127.0.0.1:5557
  6.  
  7. [watcher:dummy]
  8. cmd = uwsgi --master --idle 60 --http-socket fd://$(circus.sockets.foo) --wsgi-file yourapp.wsgi
  9. use_sockets = True
  10. warmup_delay = 0
  11. send_hup = True
  12. stop_signal = QUIT
  13.  
  14. [socket:foo]
  15. host = 0.0.0.0
  16. port = 8888

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