Edit: Les dernières versions de PyDev (depuis PyDev 3.4.1) ne nécessite pas solution de contournement:
ie: PyDev va bien tuer sous-processus sur une opération de processus de tuer et lors du débogage, même avec le rechargement régulier, PyDev attachera le débogueur aux processus fils.
Vieille réponse (pour les versions PyDev plus que 3.4.1):
Malheureusement, ce qui est attendu, comme PyDev simplement tuer le processus parent (ex: comme si au lieu de ctrl + C vous tuez processus parent dans le gestionnaire de tâches).
La solution serait d'éditer Django lui-même afin que le processus fils interroge le processus parent pour savoir qu'il est encore vivant et quitter si ce n'est pas le cas ... voir: How to make child process die after parent exits? pour référence. Après un rapide coup d'oeil, il semble lié à django/utils/autoreload.py et la façon dont il démarre les choses - donc, il serait nécessaire de démarrer un thread qui continue à voir si le parent est vivant et s'il ne l'est pas, il tue le processus enfant - J'ai signalé cela comme un bug dans Django Remarque: en guise de solution de rechange pour PyDev, vous pouvez faire en sorte que Django alloue une nouvelle console (hors PyDev) tout en continuant à partir de PyDev (ainsi, jusqu'à ce qu'une solution appropriée soit disponible depuis Django, le patch ci-dessous peut être utilisé pour que le chargement automatique de Django alloue une nouvelle console - où vous pouvez utiliser correctement 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
Je me demande si vous pouvez appeler cela une solution élégante. C'est simple, et ça fonctionne. – Udi