make_app uses threading.Lock now by default

Uses keyword arguments to use multiprocessing or uwsgi mixin. This
fixes an issue on exotic *BSDs such as NetBSD where Python comes not
with inter-process semaphores (issue 3307):

     mod_wsgi (pid=14365): Target WSGI script '/var/www/vhosts/my.hostname.org/htdocs/isso.wsgi' cannot be loaded as Python module.
     mod_wsgi (pid=14365): Exception occurred processing WSGI script '/var/www/vhosts/my.hostname.org/htdocs/isso.wsgi'.
     Traceback (most recent call last):
       File "/var/www/vhosts/my.hostname.org/htdocs/isso.wsgi", line 8, in <module>
         application = make_app(Config.load("/var/www/vhosts/my.hostname.org/htdocs/isso.cfg"))
       File "/usr/pkg/lib/python2.7/site-packages/isso/__init__.py", line 155, in make_app
         isso = App(conf)
       File "/usr/pkg/lib/python2.7/site-packages/isso/__init__.py", line 91, in __init__
         super(Isso, self).__init__(conf)
       File "/usr/pkg/lib/python2.7/site-packages/isso/core.py", line 223, in __init__
         self.lock = multiprocessing.Lock()
       File "/usr/pkg/lib/python2.7/multiprocessing/__init__.py", line 175, in Lock
         from multiprocessing.synchronize import Lock
       File "/usr/pkg/lib/python2.7/multiprocessing/synchronize.py", line 59, in <module>
         " function, see issue 3770.")
     ImportError: This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770.
pull/48/head
Martin Zimmermann 11 years ago
parent a7375e8016
commit fcd0a01de3

@ -30,16 +30,15 @@ from __future__ import print_function
import pkg_resources
dist = pkg_resources.get_distribution("isso")
try:
import uwsgi
except ImportError:
uwsgi = None
# check if exectuable is `isso` and gevent is available
import sys
if sys.argv[0].startswith("isso"):
try:
import gevent.monkey; gevent.monkey.patch_all()
except ImportError:
gevent = None
pass
import sys
import os
import errno
import logging
@ -140,18 +139,20 @@ class Isso(object):
return self.wsgi_app(environ, start_response)
def make_app(conf=None):
def make_app(conf=None, threading=True, multiprocessing=False, uwsgi=False):
if uwsgi:
class App(Isso, uWSGIMixin):
pass
elif gevent or sys.argv[0].endswith("isso"):
if threading:
class App(Isso, ThreadedMixin):
pass
else:
if multiprocessing:
class App(Isso, ProcessMixin):
pass
if uwsgi:
class App(Isso, uWSGIMixin):
pass
isso = App(conf)
for host in conf.getiter("general", "host"):

@ -5,4 +5,5 @@ import os
from isso import make_app
from isso.core import Config
application = make_app(Config.load(os.environ.get('ISSO_SETTINGS')))
application = make_app(Config.load(os.environ.get('ISSO_SETTINGS')),
multiprocessing=True)

Loading…
Cancel
Save