Changeset 14:38fc972c06c7
- Timestamp:
- 05/18/05 12:59:02
(3 years ago)
- Author:
- Allan Saddi <allan@saddi.com>
- branch:
- default
- convert_revision:
- svn:46762da8-4eb7-0310-94e9-d918b60927c8/flup/trunk@1786
- Message:
Change threaded servers so wsgi.multiprocess is False by default.
Allow it to be changed by keyword argument.
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r13 |
r14 |
|
| 1 | 1 | 2005-05-18 Allan Saddi <asaddi@ganymede.saddi.net> |
|---|
| 2 | 2 | |
|---|
| | 3 | * Change threaded servers so wsgi.multiprocess is False by default. |
|---|
| | 4 | Allow it to be changed by keyword argument. |
|---|
| 3 | 5 | * Fix wsgi.multiprocess for scgi_fork. (Set to True.) |
|---|
| 4 | 6 | |
|---|
| r2 |
r14 |
|
| 102 | 102 | """ |
|---|
| 103 | 103 | def __init__(self, application, scriptName='', environ=None, |
|---|
| 104 | | multithreaded=True, |
|---|
| | 104 | multithreaded=True, multiprocess=False, |
|---|
| 105 | 105 | bindAddress=('localhost', 8009), allowedServers=None, |
|---|
| 106 | 106 | loggingLevel=logging.INFO, **kw): |
|---|
| … | … | |
| 129 | 129 | environ=environ, |
|---|
| 130 | 130 | multithreaded=multithreaded, |
|---|
| | 131 | multiprocess=multiprocess, |
|---|
| 131 | 132 | bindAddress=bindAddress, |
|---|
| 132 | 133 | allowedServers=allowedServers, |
|---|
| r2 |
r14 |
|
| 758 | 758 | |
|---|
| 759 | 759 | def __init__(self, application, scriptName='', environ=None, |
|---|
| 760 | | multithreaded=True, |
|---|
| | 760 | multithreaded=True, multiprocess=False, |
|---|
| 761 | 761 | bindAddress=('localhost', 8009), allowedServers=None, |
|---|
| 762 | 762 | loggingLevel=logging.INFO): |
|---|
| … | … | |
| 772 | 772 | Set multithreaded to False if your application is not thread-safe. |
|---|
| 773 | 773 | |
|---|
| | 774 | Set multiprocess to True to explicitly set wsgi.multiprocess to |
|---|
| | 775 | True. (Only makes sense with threaded servers.) |
|---|
| | 776 | |
|---|
| 774 | 777 | bindAddress is the address to bind to, which must be a tuple of |
|---|
| 775 | 778 | length 2. The first element is a string, which is the host name |
|---|
| … | … | |
| 790 | 793 | self.environ = environ |
|---|
| 791 | 794 | self.multithreaded = multithreaded |
|---|
| | 795 | self.multiprocess = multiprocess |
|---|
| 792 | 796 | self._bindAddress = bindAddress |
|---|
| 793 | 797 | self._allowedServers = allowedServers |
|---|
| … | … | |
| 830 | 834 | environ['wsgi.errors'] = sys.stderr |
|---|
| 831 | 835 | environ['wsgi.multithread'] = self.multithreaded |
|---|
| 832 | | environ['wsgi.multiprocess'] = True |
|---|
| | 836 | environ['wsgi.multiprocess'] = self.multiprocess |
|---|
| 833 | 837 | environ['wsgi.run_once'] = False |
|---|
| 834 | 838 | |
|---|
| r2 |
r14 |
|
| 128 | 128 | environ=environ, |
|---|
| 129 | 129 | multithreaded=False, |
|---|
| | 130 | multiprocess=True, |
|---|
| 130 | 131 | bindAddress=bindAddress, |
|---|
| 131 | 132 | allowedServers=allowedServers, |
|---|
| 132 | 133 | loggingLevel=loggingLevel) |
|---|
| 133 | | for key in ('multithreaded', 'jobClass', 'jobArgs'): |
|---|
| | 134 | for key in ('multithreaded', 'multiprocess', 'jobClass', 'jobArgs'): |
|---|
| 134 | 135 | if kw.has_key(key): |
|---|
| 135 | 136 | del kw[key] |
|---|
| r7 |
r14 |
|
| 63 | 63 | """ |
|---|
| 64 | 64 | def __init__(self, application, environ=None, |
|---|
| 65 | | multithreaded=True, |
|---|
| | 65 | multithreaded=True, multiprocess=False, |
|---|
| 66 | 66 | bindAddress=None, multiplexed=False, **kw): |
|---|
| 67 | 67 | """ |
|---|
| … | … | |
| 82 | 82 | environ=environ, |
|---|
| 83 | 83 | multithreaded=multithreaded, |
|---|
| | 84 | multiprocess=multiprocess, |
|---|
| 84 | 85 | bindAddress=bindAddress, |
|---|
| 85 | 86 | multiplexed=multiplexed) |
|---|
| r2 |
r14 |
|
| 883 | 883 | inputStreamShrinkThreshold = 102400 - 8192 |
|---|
| 884 | 884 | |
|---|
| 885 | | def __init__(self, application, environ=None, multithreaded=True, |
|---|
| | 885 | def __init__(self, application, environ=None, |
|---|
| | 886 | multithreaded=True, multiprocess=False, |
|---|
| 886 | 887 | bindAddress=None, multiplexed=False): |
|---|
| 887 | 888 | """ |
|---|
| … | … | |
| 908 | 909 | self.environ = environ |
|---|
| 909 | 910 | self.multithreaded = multithreaded |
|---|
| | 911 | self.multiprocess = multiprocess |
|---|
| 910 | 912 | |
|---|
| 911 | 913 | self._bindAddress = bindAddress |
|---|
| … | … | |
| 1010 | 1012 | environ['wsgi.multithread'] = not isinstance(req, CGIRequest) and \ |
|---|
| 1011 | 1013 | thread_available and self.multithreaded |
|---|
| 1012 | | # Rationale for the following: If started by the web server |
|---|
| 1013 | | # (self._bindAddress is None) in either FastCGI or CGI mode, the |
|---|
| 1014 | | # possibility of being spawned multiple times simultaneously is quite |
|---|
| 1015 | | # real. And, if started as an external server, multiple copies may be |
|---|
| 1016 | | # spawned for load-balancing/redundancy. (Though I don't think |
|---|
| 1017 | | # mod_fastcgi supports this?) |
|---|
| 1018 | | environ['wsgi.multiprocess'] = True |
|---|
| | 1014 | environ['wsgi.multiprocess'] = isinstance(req, CGIRequest) or \ |
|---|
| | 1015 | self.multiprocess |
|---|
| 1019 | 1016 | environ['wsgi.run_once'] = isinstance(req, CGIRequest) |
|---|
| 1020 | 1017 | |
|---|
| r7 |
r14 |
|
| 82 | 82 | environ=environ, |
|---|
| 83 | 83 | multithreaded=False, |
|---|
| | 84 | multiprocess=True, |
|---|
| 84 | 85 | bindAddress=bindAddress, |
|---|
| 85 | 86 | multiplexed=multiplexed) |
|---|
| 86 | | for key in ('multithreaded', 'jobClass', 'jobArgs'): |
|---|
| | 87 | for key in ('multithreaded', 'multiprocess', 'jobClass', 'jobArgs'): |
|---|
| 87 | 88 | if kw.has_key(key): |
|---|
| 88 | 89 | del kw[key] |
|---|
| r9 |
r14 |
|
| 89 | 89 | """ |
|---|
| 90 | 90 | def __init__(self, application, scriptName='', environ=None, |
|---|
| 91 | | multithreaded=True, |
|---|
| | 91 | multithreaded=True, multiprocess=False, |
|---|
| 92 | 92 | bindAddress=('localhost', 4000), allowedServers=None, |
|---|
| 93 | 93 | loggingLevel=logging.INFO, **kw): |
|---|
| … | … | |
| 116 | 116 | environ=environ, |
|---|
| 117 | 117 | multithreaded=multithreaded, |
|---|
| | 118 | multiprocess=multiprocess, |
|---|
| 118 | 119 | bindAddress=bindAddress, |
|---|
| 119 | 120 | allowedServers=allowedServers, |
|---|
| r13 |
r14 |
|
| 268 | 268 | requestClass = Request |
|---|
| 269 | 269 | |
|---|
| 270 | | # AFAIK, the current mod_scgi does not do load-balancing/fail-over. |
|---|
| 271 | | # So a single application deployment will only run in one process |
|---|
| 272 | | # at a time, on this server (when using a threaded server, of course). |
|---|
| 273 | | _multiprocess = False |
|---|
| 274 | | |
|---|
| 275 | 270 | def __init__(self, application, scriptName='', environ=None, |
|---|
| 276 | | multithreaded=True, |
|---|
| | 271 | multithreaded=True, multiprocess=False, |
|---|
| 277 | 272 | bindAddress=('localhost', 4000), allowedServers=None, |
|---|
| 278 | 273 | loggingLevel=logging.INFO): |
|---|
| … | … | |
| 288 | 283 | Set multithreaded to False if your application is not thread-safe. |
|---|
| 289 | 284 | |
|---|
| | 285 | Set multiprocess to True to explicitly set wsgi.multiprocess to |
|---|
| | 286 | True. (Only makes sense with threaded servers.) |
|---|
| | 287 | |
|---|
| 290 | 288 | bindAddress is the address to bind to, which must be a tuple of |
|---|
| 291 | 289 | length 2. The first element is a string, which is the host name |
|---|
| … | … | |
| 306 | 304 | self.environ = environ |
|---|
| 307 | 305 | self.multithreaded = multithreaded |
|---|
| | 306 | self.multiprocess = multiprocess |
|---|
| 308 | 307 | self._bindAddress = bindAddress |
|---|
| 309 | 308 | self._allowedServers = allowedServers |
|---|
| … | … | |
| 346 | 345 | environ['wsgi.errors'] = sys.stderr |
|---|
| 347 | 346 | environ['wsgi.multithread'] = self.multithreaded |
|---|
| 348 | | environ['wsgi.multiprocess'] = self._multiprocess |
|---|
| | 347 | environ['wsgi.multiprocess'] = self.multiprocess |
|---|
| 349 | 348 | environ['wsgi.run_once'] = False |
|---|
| 350 | 349 | |
|---|
| r13 |
r14 |
|
| 73 | 73 | |
|---|
| 74 | 74 | class WSGIServer(BaseSCGIServer, PreforkServer): |
|---|
| 75 | | _multiprocess = True |
|---|
| 76 | | |
|---|
| 77 | 75 | """ |
|---|
| 78 | 76 | SCGI/WSGI server. For information about SCGI (Simple Common Gateway |
|---|
| … | … | |
| 117 | 115 | environ=environ, |
|---|
| 118 | 116 | multithreaded=False, |
|---|
| | 117 | multiprocess=True, |
|---|
| 119 | 118 | bindAddress=bindAddress, |
|---|
| 120 | 119 | allowedServers=allowedServers, |
|---|
| 121 | 120 | loggingLevel=loggingLevel) |
|---|
| 122 | | for key in ('multithreaded', 'jobClass', 'jobArgs'): |
|---|
| | 121 | for key in ('multithreaded', 'multiprocess', 'jobClass', 'jobArgs'): |
|---|
| 123 | 122 | if kw.has_key(key): |
|---|
| 124 | 123 | del kw[key] |
|---|