I need to use django setup because of the error described 
here: 
http://stackoverflow.com/questions/25537905/django-1-7-throws-django-core-exceptions-appregistrynotready-models-arent-load

Can you clarify where code should lie? Do I need to separate timeout and 
MyManager?

On Friday, February 27, 2015 at 1:03:19 AM UTC+2, Graham Dumpleton wrote:
>
>
> On 27/02/2015, at 9:51 AM, Paul Royik <[email protected] <javascript:>> 
> wrote:
>
> I did it directly on Webfaction.
> Created webapps/django_math/mathsite/mathsite/task-queue-manager.py with 
> exact code you've supplied.
>
>
> It can't be exactly the same as you have moved where MathClass is defined, 
> plus the location of the UNIX socket will now no longer match.
>
> Try something like:
>
> import os
>
> from mathsite.utils import MyManager
>
> # This shouldn't be hardwired, but just to get it working.
>
> sockpath = '/home/simamura/webapps/django_math/task-queue-manager.sock'
>
> try:
>     os.unlink(sockpath)
> except OSError:
>     pass
>
> m = MyManager(address=sockpath, authkey='abracadabra')
> s = m.get_server()
> s.serve_forever()
>
> Then inside webapps/django_math/mathsite/mathsite/utils.py along with 
> timeout decorator, I created following:
>
> class RunableProcessing(multiprocessing.Process):
>     def __init__(self, func, *args, **kwargs):
>         self.queue = multiprocessing.Manager().Queue(maxsize=1)
>         args = (func,) + args
>         multiprocessing.Process.__init__(self, target=self.run_func, 
> args=args, kwargs=kwargs)
>
>     def run_func(self, func, *args, **kwargs):
>         try:
>             result = func(*args, **kwargs)
>             self.queue.put((True, result))
>         except Exception as e:
>             self.queue.put((False, e))
>
>     def done(self):
>         return self.queue.full()
>
>     def result(self):
>         return self.queue.get()
>
> import django
> django.setup()
>
>
> Why is it you need to be importing and setting up Django.
>
> One of the aims of separating this out as a service would be so that not 
> web application code is imported or used. This way it can be very 
> lightweight. You are adding to memory issues again by importing Django and 
> initialising it in this service process.
>
> def timeout(seconds, function, *args, **kwargs):
>     proc = RunableProcessing(function, *args, **kwargs)
>     proc.start()
>     proc.join(seconds)
>     if proc.is_alive():
>         proc.terminate()
>         proc.join(1)
>         if proc.is_alive():
>             try:
>                 os.kill(proc.pid, signal.SIGKILL)
>             except Exception:
>                 pass
>             proc.join(1)
>         raise TimeoutException
>     success, result = proc.result()
>     if success:
>         return result
>     else:
>         raise result
>
> import subprocess
>
>
> class MathClass(object):
>     def run(self, seconds, func, *args, **kwargs):
>         return timeout(seconds, func, *args, **kwargs)
>
> from multiprocessing.managers import BaseManager
> class MyManager(BaseManager):
>     pass
>
> MyManager.register('Maths', MathClass)
>
> Next in my view:
>
> import os
> from mathsite.utils import MyManager
> sockpath = os.path.join(os.path.dirname(__file__), 
> 'task-queue-manager.sock')
> m = MyManager(address=sockpath, authkey='abracadabra')
> m.connect()
> timeout_func = m.Maths().run
>
> timeout_func(my_function.....)
>
>
> The idea was that this is not importing the actual code for the service, 
> but going through an abstract interface.
>
> # The following would be at global scope.
>
> import os
> from multiprocessing.managers import BaseManager
>
> class MyManager(BaseManager):
>     pass
>
> MyManager.register('Maths')
>
> # This shouldn't be hardwired, but just to get it working. Must match was 
> service is using.
>
> sockpath = '/home/simamura/webapps/django_math/task-queue-manager.sock'
>
> # The following would be within the code of the view handler function.
>
> m = MyManager(address=sockpath, authkey='abracadabra')
> m.connect()
> timeout_func = m.Maths().run
>
> timeout_func(my_function.....)
>
> Graham
>
>
> On Friday, February 27, 2015 at 12:43:18 AM UTC+2, Graham Dumpleton wrote:
>
> So you tried doing this on WebFaction rather than on your own system with 
> just the files I gave you and running mod_wsgi-express directly?
>
> Can you explain exactly what you did?
>
> Graham
>
> On 27/02/2015, at 9:37 AM, Paul Royik <[email protected]> wrote:
>
> [Thu Feb 26 19:58:06.587734 2015] [wsgi:info] [pid 27981:tid 
> 139944202344192] [remote 127.0.0.1:60] mod_wsgi (pid=27981, 
> process='localhost:20241', application=''): Loading WSGI script 
> '/home/simamura/webapps/django_math/express/handler.wsgi'.
> [Thu Feb 26 19:58:06.588460 2015] [wsgi:error] [pid 27981:tid 
> 139944202344192] [remote 127.0.0.1:60] mod_wsgi (pid=27981): Target WSGI 
> script '/home/simamura/webapps/django_math/express/handler.wsgi' cannot be 
> loaded as Python module.
> [Thu Feb 26 19:58:06.588470 2015] [wsgi:error] [pid 27981:tid 
> 139944202344192] [remote 127.0.0.1:60] mod_wsgi (pid=27981): Exception 
> occurred processing WSGI script 
> '/home/simamura/webapps/django_math/express/handler.wsgi'.
> [Thu Feb 26 19:58:06.588485 2015] [wsgi:error] [pid 27981:tid 
> 139944202344192] [remote 127.0.0.1:60] Traceback (most recent call last):
> [Thu Feb 26 19:58:06.588499 2015] [wsgi:error] [pid 27981:tid 
> 139944202344192] [remote 127.0.0.1:60]   File 
> "/home/simamura/webapps/django_math/express/handler.wsgi", line 71, in 
> <module>
> [Thu Feb 26 19:58:06.588522 2015] [wsgi:error] [pid 27981:tid 
> 139944202344192] [remote 127.0.0.1:60]     
> recorder_directory=recorder_directory)
> [Thu Feb 26 19:58:06.588530 2015] [wsgi:error] [pid 27981:tid 
> 139944202344192] [remote 127.0.0.1:60]   File 
> "/home/simamura/lib/python2.7/mod_wsgi/server/__init__.py", line 1124, in 
> __init__
> [Thu Feb 26 19:58:06.588544 2015] [wsgi:error] [pid 27981:tid 
> 139944202344192] [remote 127.0.0.1:60]     exec(code, 
> self.module.__dict__)
> [Thu Feb 26 19:58:06.588551 2015] [wsgi:error] [pid 27981:tid 
> 139944202344192] [remote 
>
> ...

-- 
You received this message because you are subscribed to the Google Groups 
"modwsgi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/modwsgi.
For more options, visit https://groups.google.com/d/optout.

Reply via email to