到目前为止,我一直在尝试使用uWSGIreplace构build的许多kludgy服务器代码,并在监督下为Python wsgi应用程序进行设置。 我正在同时运行几十个这样的小项目(Django,Flask等)。
目前我在Virtualhost模式下运行,我允许NGINX基本上调用应用程序。 但是,似乎重新加载function“触摸重新加载”是为了一个特定的文件。
有没有办法使用“触摸重新加载”来监视正在运行的模块,通过指定每个站点或自动? 或者有没有办法让触摸重新加载被configuration为每个应用程序?
我也看到了皇帝模式,这似乎可能是一个稍微不好的替代品,但我不确定我的用例是否会导致数十甚至数百个进程产卵。 我喜欢虚拟主机模式,因为它基本上共享了所有应用程序的工作者池,这对我来说似乎是最有效的。
当前configuration:
uWSGI
<uwsgi> <vhost-host/> <master/> <gid>www-data</gid> <uid>www-data</uid> <catch-exceptions/> <socket>/var/tmp/uwsgi.sock</socket> <chmod-socket/> <idle>300</idle> <processes>6</processes> <no-orphans/> <enable-threads/> <reload-mercy>5</reload-mercy> <threads>10</threads> <no-default-app/> <touch-reload/> <!-- <reload-on-rss>128</reload-on-rss> Reload at 128MB of RSS (memory usage) --> </uwsgi>
更新:
在做了一些关于uWSGI如何处理closures空闲工作人员的研究后,我想我终究需要皇帝模式。
我想要做的是让很less使用的应用程序不占用资源,而且使用的应用程序占用更多的资源。 我试图做到这一点,同时保持一个像PHP-FPM一样简单的托pipe部署。 虚拟模式实现了这一点,但似乎closures所有的工作人员,只有所有的应用程序已经空闲,这是没有用的,如果任何应用程序收到稳定的stream量。 如果不真实,我很乐意在这个问题上予以纠正。
使用皇帝模式的缺点是我将不得不为每个应用程序(Blech!)制作套接字文件和configuration文件。 我仍然想知道是否有可能实现上述每个应用程序重新加载。
你应该在官方的邮件列表中提问,你所有的陈述都是真实的,所以你应该试着要求改进清单。
如果您正在运行多个应用程序,那么您可能需要在大多数使用情况(包括您所描述的)中取代vhost模式的emperor模式。
为了dynamic扩展所有应用程序中的工作人员,您有多个选项。
最简单的可能是uWSGI cheaper子系统 。 它提供了非常细致的控制,用于设置每个应用程序的最小和最大工作人员数量,并在所有应用程序中实施全局内存限制(因此,如果所有应用程序一次都会激活,则不会完全放弃)。
如果你想要一个在所有应用程序之间共享的工作人员池(而不是为每个应用程序打开/closures工作人员),那么稍微复杂一些的解决scheme是Emperor + Broodlord + Zergs。 最好的地方可能是Broodlord模式的官方文档: http ://uwsgi-docs.readthedocs.org/en/latest/Broodlord.html