This problem occurs when I use multiprocesing.

Now, I have another problem:
Requested setting ROOT_URLCONF, but settings are not configured. You must 
either define the environment variable DJANGO_SETTINGS_MODULE or call 
settings.configure() before accessing settings. - See more at: 
http://www.emathhelp.net/calculators/calculus-2/integral-calculator/#sthash.7cApVT7o.dpuf

On Friday, February 27, 2015 at 1:19:04 AM UTC+2, Paul Royik wrote:
>
> Algorithm doesn't hit database.
>
>
> On Friday, February 27, 2015 at 1:11:05 AM UTC+2, Graham Dumpleton wrote:
>>
>> Are you saying that your algorithm actually dives down and uses Django 
>> database ORM to get data from database?
>>
>> That is, it isn't a standalone bit of code which can be given its own 
>> inputs and returns the result, totally independent of your web application 
>> and whatever database it is using?
>>
>> That would only be required if the algorithm is wanting to access that 
>> data setup by Django directly.
>>
>> Ideally you may the service and the algorithm usable independent of your 
>> web application.
>>
>> Graham
>>
>> On 27/02/2015, at 10:07 AM, Paul Royik <[email protected]> wrote:
>>
>> 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]> 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:
>>
>> ...
>
>

-- 
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