Opened 11 years ago
Closed 11 years ago
#21773 closed Bug (fixed)
development server sometimes takes a long time to restart after source has been changed
Reported by: | clime | Owned by: | mardini |
---|---|---|---|
Component: | Core (Management commands) | Version: | dev |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Accepted | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
There are cases when development server takes a long time to restart after sources have been changed. It happens when an exception has been raised. I fix the exception and refresh the page but it keeps throwing the same error. I usually kill the server with ctrl-c to restart it manually. But then comes another problem when I try to start it, that is: "Error: That port is already in use." Django server does not release the port when being killed. Would it be possible to release it so I can start it immediately?
Change History (12)
comment:2 by , 11 years ago
Triage Stage: | Unreviewed → Accepted |
---|
I do occasionally see this behaviour. I have no idea what causes it. The thread continuing to run in the background is very annoying and normally I have to resort to kill
comment:3 by , 11 years ago
Yes, I've seen that too. Last time I hit this problem, I had an infinite loop in a view.
follow-up: 5 comment:4 by , 11 years ago
It would be useful to know on which platform(s) and which exact Django version that behavior arises, as the reload method might be different.
comment:5 by , 11 years ago
Replying to claudep:
It would be useful to know on which platform(s) and which exact Django version that behavior arises, as the reload method might be different.
The first version of Django I have used was 1.4 and I think I have been hitting this issue since beginning. I am totally sure that it is in 1.5 and 1.6.
The platform is linux/fedora. By the way I have just encountered this issue again. This exception was raised:
Environment: Request Method: GET Request URL: http://127.0.0.1:8008/messagethreads/ Django Version: 1.6.1 Python Version: 2.7.3 Installed Applications: ('django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'south', 'grappelli', 'django.contrib.admin', 'django.contrib.admindocs', 'endless_pagination', 'debug_toolbar', 'djangoratings', 'imagekit', 'watson', 'web') Installed Middleware: ('django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'middleware.UserMemberMiddleware', 'middleware.ProfilerMiddleware', 'middleware.VaryOnAcceptMiddleware', 'debug_toolbar.middleware.DebugToolbarMiddleware', 'watson.middleware.SearchContextMiddleware') Traceback: File "/srv/www/envs/cb/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 107. response = middleware_method(request, callback, callback_args, callback_kwargs) File "/srv/www/envs/cb/lib/python2.7/site-packages/debug_toolbar/middleware.py" in process_view 73. response = panel.process_view(request, view_func, view_args, view_kwargs) File "/srv/www/envs/cb/lib/python2.7/site-packages/debug_toolbar/panels/profiling.py" in process_view 133. return self.profiler.runcall(view_func, *args, **view_kwargs) File "/usr/lib64/python2.7/cProfile.py" in runcall 149. return func(*args, **kw) File "/srv/www/envs/cb/lib/python2.7/site-packages/django/contrib/auth/decorators.py" in _wrapped_view 22. return view_func(request, *args, **kwargs) File "/srv/www/cb/web/views.py" in messagethread_list 1176. 'model_tag': MessageThread.tag, Exception Type: NameError at /messagethreads/ Exception Value: global name 'model_tag' is not defined
I fixed it and then tried to refresh the page repeatedly. Nevertheless, I was still getting the same exeption. In the end, I lost patience and decided to restart the server (the usual scenario). After killing it by ctrl-c, I tried to restart it:
^C(cb)clime@den /srv/www/cb ./manage.py runserver 127.0.0.1:8008 Validating models... 0 errors found January 27, 2014 - 18:49:35 Django version 1.6.1, using settings 'cb.settings' Starting development server at http://127.0.0.1:8008/ Quit the server with CONTROL-C. Error: That port is already in use. (cb)clime@den /srv/www/cb $ Exception KeyboardInterrupt in <module 'threading' from '/usr/lib64/python2.7/threading.pyc'> ignored
The KeyboardInterrupt exception appeared around 10 secs later. Then I could finally start the server again.
comment:6 by , 11 years ago
Component: | Uncategorized → Core (Management commands) |
---|
comment:7 by , 11 years ago
It's probably not a bug in Django, it might be caused by ThreadingMixIn of Python's SocketServer module, which Django relies on. I didn't investigate it thoroughly though, so I'm not sure.
comment:8 by , 11 years ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
comment:9 by , 11 years ago
Version: | 1.6 → master |
---|
comment:11 by , 11 years ago
Has patch: | set |
---|
comment:12 by , 11 years ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
One additional note, after ctrl-c, some thread of the server probably keeps running for some time because later I get a message about keyboard interrupt in the console. So that is probably the reason the port is not immediately available in such situations.