I've set up a development server runnin开发者_StackOverflow中文版g Cherokee on Fedora 14, using uWSGI to interface with my WSGI application.
When the application is hit with the first request, I spawn a process like so:
from subprocess import Popen
Popen(['bash']) # bash is just an example; the problem happens with all programs
The first request takes 10-15 seconds to complete (subsequent ones take less than a second). Without the creation of the Popen object, the first request only takes about 2-3 seconds to complete. When I execute the same Popen request from a Python shell, it's instantaneous.
What could be causing this behaviour? Have I missed something obvious?
--close-on-exec
Otherwise your new process will inherit the socket
(this is a UNIX standard behaviour)
If you prefer to handle this in your python code, you have the option to pass close_fds=True to Popen() then any sockets will not be inherited by the forked process.
精彩评论