从Django项目中启动多个开发服务器

4
我正在编写一个针对Django项目的基于Web的代码编辑器。在编辑器内部,我想启动Django runserver命令,而不会干扰编辑器本身的服务器。以下是我使用的代码。服务器(端口9999)已经启动,但是当我更改刚刚启动服务器的项目的代码时,两个服务器都会停止运行。错误信息是“该端口已被占用”。
def runserver(request, project_slug):
    project = Project.objects.get(slug=project_slug)
    import os
    os.system('cd %s; pwd; env; DJANGO_SETTINGS_MODULE=%s.settings; rm nohup.out; nohup python manage.py runserver 0.0.0.0:9999 &' % (project.get_current_directory(), project.slug))
    return HttpResponseRedirect(request.META['HTTP_REFERER'])   

为什么编辑器在开发服务器上运行,而不是更稳定/可扩展的东西? - Daniel Roseman
因为我不知道如何使用其他东西。目前我只想要一个简单的个人使用工具。 - Timothy Clemans
1个回答

2

您需要投入更多的工作来管理您启动的服务器。如果您多次调用runserver(request, project_slug),那么该资源将被另一个绑定到该端口的后台进程占用,而现在您甚至没有PID文件来引用该进程。

您需要添加一些技巧来启动/杀死WSGIServer,并且您肯定需要使用socket低级网络库来使其选择一个空闲端口-避免手动选择端口,因为您无法保证系统上的其他进程不会占用该端口并导致应用程序进入不可恢复的错误状态。

幸运的是,您有开源Lettuce项目,可以在后台的单独线程上正确地管理Django服务器实例。这里是服务器的实际代码,我鼓励你查看并采用它以满足你自己的需求。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接