3

我正在为 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'])   
4

1 回答 1

1

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

您需要添加一些体操来启动/终止WSGIServer,并且您肯定需要使用socket低级网络库让它为您选择一个空闲端口——推迟手动选择一个端口,因为您不能保证您系统上的其他进程不会占用该端口并导致您的应用程序进入不可恢复的错误状态。

不过幸运的是,您有一个开源的Lettuce项目,它可以在单独的线程上在后台正确管理 Django 服务器实例。这是server 的实际代码,我鼓励您查看并用于您自己的目的。

于 2012-05-01T10:44:52.963 回答