从 Django 项目启动多个 Django 开发服务器
Posted
技术标签:
【中文标题】从 Django 项目启动多个 Django 开发服务器【英文标题】:Starting multiple Django development servers from a Django project 【发布时间】:2012-05-10 21:17:05 【问题描述】:我正在为 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'])
【问题讨论】:
为什么编辑器在开发服务器中运行,而不是更稳定/可扩展的东西? 因为我不知道用什么别的。我现在只想要一些简单的东西供个人使用。 【参考方案1】:您需要投入更多工作来管理您启动的服务器。如果您多次调用runserver(request, project_slug)
,则该资源将被绑定到该端口的另一个后台进程占用,而现在您甚至没有 PID 文件来引用该进程。
您需要添加一些体操来启动/杀死WSGIServer,并且您肯定需要使用socket
低级网络库来让它select a free port for you--推迟手动选择端口因为您无法保证系统上的其他进程不会占用该端口并导致您的应用程序进入不可恢复的错误状态。
不过,幸运的是,您拥有开源 Lettuce 项目,该项目可以在单独的线程上在后台正确管理 Django 服务器实例。这是actual code for the server,我鼓励您查看并采用它以用于您自己的目的。
【讨论】:
以上是关于从 Django 项目启动多个 Django 开发服务器的主要内容,如果未能解决你的问题,请参考以下文章
python测试开发django-177.启动项目添加初始化数据(fixtures的使用)