我正在为 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'])
请您参考如下方法:
您需要投入更多的精力来管理您启动的服务器。如果您多次调用 runserver(request, project_slug),该资源将已被绑定(bind)到该端口的另一个后台进程占用,现在您甚至没有 PID文件以引用该过程。
您需要添加一些体操来启动/杀死 WSGIServer你肯定需要使用 socket拥有它的低级网络库 select a free port for you -- 推迟手动选择端口,因为您无法保证系统上的其他进程不会占用该端口并导致您的应用程序进入不可恢复的错误状态。
幸运的是,您拥有开源 Lettuce在单独线程的后台正确管理 Django 服务器实例的项目。这是 actual code for the server ,我鼓励您出于自己的目的查看和采用。
