Editar: Últimas versiones PyDev (desde PyDev 3.4.1) ya no necesita ninguna solución:
es decir: PyDev matará correctamente subprocesos en una operación de proceso de matanza y al depurar incluso con regularidad recarga de, PyDev adjuntará el depurador de los procesos secundarios.
respuesta Viejo (para las versiones mayores de PyDev 3.4.1):
Por desgracia, eso es lo esperado, ya que PyDev simplemente matar el proceso padre (es decir: como si en lugar de Ctrl + C matan a los proceso principal en el administrador de tareas).
La solución sería editar Django para que el proceso hijo sondee el proceso principal para saber que todavía está vivo y salir si no ... ver: How to make child process die after parent exits? para referencia.
Después de un rápido vistazo parece estar relacionado con django/utils/autoreload.py y la forma en que inicia las cosas, por lo tanto, sería necesario iniciar un hilo que siga viendo si el padre está vivo y si no es que mata el proceso secundario, lo he reportado como un error en Django sí: https://code.djangoproject.com/ticket/16982
Nota: como una solución para PyDev, puede que Django asignar una nueva consola (de PyDev) al mismo tiempo que va desde PyDev (así, hasta que una solución adecuada está disponible de Django, el parche a continuación se pueden utilizado para hacer que la autorecarga de Django asigne una nueva consola, donde puede usar correctamente Ctrl + C).
Index: django/utils/autoreload.py
===================================================================
--- django/utils/autoreload.py (revision 16923)
+++ django/utils/autoreload.py (working copy)
@@ -98,11 +98,14 @@
def restart_with_reloader():
while True:
args = [sys.executable] + ['-W%s' % o for o in sys.warnoptions] + sys.argv
- if sys.platform == "win32":
- args = ['"%s"' % arg for arg in args]
new_environ = os.environ.copy()
new_environ["RUN_MAIN"] = 'true'
- exit_code = os.spawnve(os.P_WAIT, sys.executable, args, new_environ)
+
+ import subprocess
+ popen = subprocess.Popen(args, env=new_environ, creationflags=subprocess.CREATE_NEW_CONSOLE)
+ exit_code = popen.wait()
if exit_code != 3:
return exit_code
Me pregunto si puede llamar a esto una solución elegante. Es simple, y funciona. – Udi