diff options
author | Allan Saddi <allan@saddi.com> | 2005-05-18 19:59:02 +0000 |
---|---|---|
committer | Allan Saddi <allan@saddi.com> | 2005-05-18 19:59:02 +0000 |
commit | 8f4e536580563b7aadbe71e722c475e81c679b4e (patch) | |
tree | 4993cdccaa2caeb10be5cd5d058a925a69b682e9 | |
parent | a8a85bf72115f6b84a655ed08872bf74410815a5 (diff) | |
download | flup-8f4e536580563b7aadbe71e722c475e81c679b4e.tar.gz |
Change threaded servers so wsgi.multiprocess is False by default.
Allow it to be changed by keyword argument.
-rw-r--r-- | ChangeLog | 2 | ||||
-rw-r--r-- | flup/server/ajp.py | 3 | ||||
-rw-r--r-- | flup/server/ajp_base.py | 8 | ||||
-rw-r--r-- | flup/server/ajp_fork.py | 3 | ||||
-rw-r--r-- | flup/server/fcgi.py | 3 | ||||
-rw-r--r-- | flup/server/fcgi_base.py | 13 | ||||
-rw-r--r-- | flup/server/fcgi_fork.py | 3 | ||||
-rw-r--r-- | flup/server/scgi.py | 3 | ||||
-rw-r--r-- | flup/server/scgi_base.py | 13 | ||||
-rw-r--r-- | flup/server/scgi_fork.py | 5 |
10 files changed, 31 insertions, 25 deletions
@@ -1,5 +1,7 @@ 2005-05-18 Allan Saddi <asaddi@ganymede.saddi.net> + * Change threaded servers so wsgi.multiprocess is False by default. + Allow it to be changed by keyword argument. * Fix wsgi.multiprocess for scgi_fork. (Set to True.) 2005-05-15 Allan Saddi <asaddi@ganymede.saddi.net> diff --git a/flup/server/ajp.py b/flup/server/ajp.py index be9c3a7..ba6c482 100644 --- a/flup/server/ajp.py +++ b/flup/server/ajp.py @@ -101,7 +101,7 @@ class WSGIServer(BaseAJPServer, ThreadedServer): mod_jk) - see <http://jakarta.apache.org/tomcat/connectors-doc/>. """ def __init__(self, application, scriptName='', environ=None, - multithreaded=True, + multithreaded=True, multiprocess=False, bindAddress=('localhost', 8009), allowedServers=None, loggingLevel=logging.INFO, **kw): """ @@ -128,6 +128,7 @@ class WSGIServer(BaseAJPServer, ThreadedServer): scriptName=scriptName, environ=environ, multithreaded=multithreaded, + multiprocess=multiprocess, bindAddress=bindAddress, allowedServers=allowedServers, loggingLevel=loggingLevel) diff --git a/flup/server/ajp_base.py b/flup/server/ajp_base.py index 32e0f9c..e86792a 100644 --- a/flup/server/ajp_base.py +++ b/flup/server/ajp_base.py @@ -757,7 +757,7 @@ class BaseAJPServer(object): inputStreamShrinkThreshold = 102400 - 8192 def __init__(self, application, scriptName='', environ=None, - multithreaded=True, + multithreaded=True, multiprocess=False, bindAddress=('localhost', 8009), allowedServers=None, loggingLevel=logging.INFO): """ @@ -771,6 +771,9 @@ class BaseAJPServer(object): Set multithreaded to False if your application is not thread-safe. + Set multiprocess to True to explicitly set wsgi.multiprocess to + True. (Only makes sense with threaded servers.) + bindAddress is the address to bind to, which must be a tuple of length 2. The first element is a string, which is the host name or IPv4 address of a local interface. The 2nd element is the port @@ -789,6 +792,7 @@ class BaseAJPServer(object): self.scriptName = scriptName self.environ = environ self.multithreaded = multithreaded + self.multiprocess = multiprocess self._bindAddress = bindAddress self._allowedServers = allowedServers @@ -829,7 +833,7 @@ class BaseAJPServer(object): environ['wsgi.input'] = request.input environ['wsgi.errors'] = sys.stderr environ['wsgi.multithread'] = self.multithreaded - environ['wsgi.multiprocess'] = True + environ['wsgi.multiprocess'] = self.multiprocess environ['wsgi.run_once'] = False if environ.get('HTTPS', 'off') in ('on', '1'): diff --git a/flup/server/ajp_fork.py b/flup/server/ajp_fork.py index 4cfaec7..9ce25b1 100644 --- a/flup/server/ajp_fork.py +++ b/flup/server/ajp_fork.py @@ -127,10 +127,11 @@ class WSGIServer(BaseAJPServer, PreforkServer): scriptName=scriptName, environ=environ, multithreaded=False, + multiprocess=True, bindAddress=bindAddress, allowedServers=allowedServers, loggingLevel=loggingLevel) - for key in ('multithreaded', 'jobClass', 'jobArgs'): + for key in ('multithreaded', 'multiprocess', 'jobClass', 'jobArgs'): if kw.has_key(key): del kw[key] PreforkServer.__init__(self, jobClass=Connection, jobArgs=(self,), **kw) diff --git a/flup/server/fcgi.py b/flup/server/fcgi.py index a03f1a6..b8cc166 100644 --- a/flup/server/fcgi.py +++ b/flup/server/fcgi.py @@ -62,7 +62,7 @@ class WSGIServer(BaseFCGIServer, ThreadedServer): <http://www.python.org/peps/pep-0333.html>. """ def __init__(self, application, environ=None, - multithreaded=True, + multithreaded=True, multiprocess=False, bindAddress=None, multiplexed=False, **kw): """ environ, if present, must be a dictionary-like object. Its @@ -81,6 +81,7 @@ class WSGIServer(BaseFCGIServer, ThreadedServer): BaseFCGIServer.__init__(self, application, environ=environ, multithreaded=multithreaded, + multiprocess=multiprocess, bindAddress=bindAddress, multiplexed=multiplexed) for key in ('jobClass', 'jobArgs'): diff --git a/flup/server/fcgi_base.py b/flup/server/fcgi_base.py index 33e13d3..69ed2a0 100644 --- a/flup/server/fcgi_base.py +++ b/flup/server/fcgi_base.py @@ -882,7 +882,8 @@ class BaseFCGIServer(object): # we throw away already-read data once this certain amount has been read. inputStreamShrinkThreshold = 102400 - 8192 - def __init__(self, application, environ=None, multithreaded=True, + def __init__(self, application, environ=None, + multithreaded=True, multiprocess=False, bindAddress=None, multiplexed=False): """ bindAddress, if present, must either be a string or a 2-tuple. If @@ -907,6 +908,7 @@ class BaseFCGIServer(object): self.application = application self.environ = environ self.multithreaded = multithreaded + self.multiprocess = multiprocess self._bindAddress = bindAddress @@ -1009,13 +1011,8 @@ class BaseFCGIServer(object): environ['wsgi.errors'] = stderr environ['wsgi.multithread'] = not isinstance(req, CGIRequest) and \ thread_available and self.multithreaded - # Rationale for the following: If started by the web server - # (self._bindAddress is None) in either FastCGI or CGI mode, the - # possibility of being spawned multiple times simultaneously is quite - # real. And, if started as an external server, multiple copies may be - # spawned for load-balancing/redundancy. (Though I don't think - # mod_fastcgi supports this?) - environ['wsgi.multiprocess'] = True + environ['wsgi.multiprocess'] = isinstance(req, CGIRequest) or \ + self.multiprocess environ['wsgi.run_once'] = isinstance(req, CGIRequest) if environ.get('HTTPS', 'off') in ('on', '1'): diff --git a/flup/server/fcgi_fork.py b/flup/server/fcgi_fork.py index 238da14..2aa48e0 100644 --- a/flup/server/fcgi_fork.py +++ b/flup/server/fcgi_fork.py @@ -81,9 +81,10 @@ class WSGIServer(BaseFCGIServer, PreforkServer): BaseFCGIServer.__init__(self, application, environ=environ, multithreaded=False, + multiprocess=True, bindAddress=bindAddress, multiplexed=multiplexed) - for key in ('multithreaded', 'jobClass', 'jobArgs'): + for key in ('multithreaded', 'multiprocess', 'jobClass', 'jobArgs'): if kw.has_key(key): del kw[key] PreforkServer.__init__(self, jobClass=self._connectionClass, diff --git a/flup/server/scgi.py b/flup/server/scgi.py index 86e287d..5dbf377 100644 --- a/flup/server/scgi.py +++ b/flup/server/scgi.py @@ -88,7 +88,7 @@ class WSGIServer(BaseSCGIServer, ThreadedServer): mind running in multiple processes, go use SWAP. ;) """ def __init__(self, application, scriptName='', environ=None, - multithreaded=True, + multithreaded=True, multiprocess=False, bindAddress=('localhost', 4000), allowedServers=None, loggingLevel=logging.INFO, **kw): """ @@ -115,6 +115,7 @@ class WSGIServer(BaseSCGIServer, ThreadedServer): scriptName=scriptName, environ=environ, multithreaded=multithreaded, + multiprocess=multiprocess, bindAddress=bindAddress, allowedServers=allowedServers, loggingLevel=loggingLevel) diff --git a/flup/server/scgi_base.py b/flup/server/scgi_base.py index 198f293..8da1c36 100644 --- a/flup/server/scgi_base.py +++ b/flup/server/scgi_base.py @@ -267,13 +267,8 @@ class BaseSCGIServer(object): # What Request class to use. requestClass = Request - # AFAIK, the current mod_scgi does not do load-balancing/fail-over. - # So a single application deployment will only run in one process - # at a time, on this server (when using a threaded server, of course). - _multiprocess = False - def __init__(self, application, scriptName='', environ=None, - multithreaded=True, + multithreaded=True, multiprocess=False, bindAddress=('localhost', 4000), allowedServers=None, loggingLevel=logging.INFO): """ @@ -287,6 +282,9 @@ class BaseSCGIServer(object): Set multithreaded to False if your application is not thread-safe. + Set multiprocess to True to explicitly set wsgi.multiprocess to + True. (Only makes sense with threaded servers.) + bindAddress is the address to bind to, which must be a tuple of length 2. The first element is a string, which is the host name or IPv4 address of a local interface. The 2nd element is the port @@ -305,6 +303,7 @@ class BaseSCGIServer(object): self.scriptName = scriptName self.environ = environ self.multithreaded = multithreaded + self.multiprocess = multiprocess self._bindAddress = bindAddress self._allowedServers = allowedServers @@ -345,7 +344,7 @@ class BaseSCGIServer(object): environ['wsgi.input'] = request.stdin environ['wsgi.errors'] = sys.stderr environ['wsgi.multithread'] = self.multithreaded - environ['wsgi.multiprocess'] = self._multiprocess + environ['wsgi.multiprocess'] = self.multiprocess environ['wsgi.run_once'] = False if environ.get('HTTPS', 'off') in ('on', '1'): diff --git a/flup/server/scgi_fork.py b/flup/server/scgi_fork.py index 103a1ce..8b39e65 100644 --- a/flup/server/scgi_fork.py +++ b/flup/server/scgi_fork.py @@ -72,8 +72,6 @@ from preforkserver import PreforkServer __all__ = ['WSGIServer'] class WSGIServer(BaseSCGIServer, PreforkServer): - _multiprocess = True - """ SCGI/WSGI server. For information about SCGI (Simple Common Gateway Interface), see <http://www.mems-exchange.org/software/scgi/>. @@ -116,10 +114,11 @@ class WSGIServer(BaseSCGIServer, PreforkServer): scriptName=scriptName, environ=environ, multithreaded=False, + multiprocess=True, bindAddress=bindAddress, allowedServers=allowedServers, loggingLevel=loggingLevel) - for key in ('multithreaded', 'jobClass', 'jobArgs'): + for key in ('multithreaded', 'multiprocess', 'jobClass', 'jobArgs'): if kw.has_key(key): del kw[key] PreforkServer.__init__(self, jobClass=Connection, jobArgs=(self,), **kw) |