summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllan Saddi <allan@saddi.com>2005-05-18 19:59:02 +0000
committerAllan Saddi <allan@saddi.com>2005-05-18 19:59:02 +0000
commit8f4e536580563b7aadbe71e722c475e81c679b4e (patch)
tree4993cdccaa2caeb10be5cd5d058a925a69b682e9
parenta8a85bf72115f6b84a655ed08872bf74410815a5 (diff)
downloadflup-8f4e536580563b7aadbe71e722c475e81c679b4e.tar.gz
Change threaded servers so wsgi.multiprocess is False by default.
Allow it to be changed by keyword argument.
-rw-r--r--ChangeLog2
-rw-r--r--flup/server/ajp.py3
-rw-r--r--flup/server/ajp_base.py8
-rw-r--r--flup/server/ajp_fork.py3
-rw-r--r--flup/server/fcgi.py3
-rw-r--r--flup/server/fcgi_base.py13
-rw-r--r--flup/server/fcgi_fork.py3
-rw-r--r--flup/server/scgi.py3
-rw-r--r--flup/server/scgi_base.py13
-rw-r--r--flup/server/scgi_fork.py5
10 files changed, 31 insertions, 25 deletions
diff --git a/ChangeLog b/ChangeLog
index 1ee1247..17880aa 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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)