I'd have to debug to see what is happening, but it's not too
surprising if there are issues with SymPy and multiprocessing because
SymPy has several issues with pickle
(https://github.com/sympy/sympy/search?q=pickle&ref=cmdform&state=open&type=Issues).

Aaron Meurer

On Thu, Feb 19, 2015 at 1:35 AM, Paul Royik <[email protected]> wrote:
> I'm using sympy in my web-based project.
> Specifically, I need to calculate integral.
>
> However, I need to limit time and interrupt function.
> Code, that I use.
>
> import multiprocessing
> class RunableProcessing(multiprocessing.Process):
>     def __init__(self, func, *args, **kwargs):
>         self.queue = multiprocessing.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()
>
> def timeout(seconds, func, *args, **kwargs):
>     proc = RunableProcessing(func, *args, **kwargs)
>     proc.start()
>     proc.join(seconds)
>     if proc.is_alive():
>         proc.terminate()
>         raise TimeoutException
>     success, result = proc.result()
>     if success:
>         return result
>     else:
>         raise result
>
>
> And here is simple part for integration
> def wrapper(f,var):
>     #do stuff
>
> def int_wrapper(f, var):
>    return f.integrate(var)
>
> try:
>     sol = timeout(10, wrapper, f, var)
> except TimeoutException:
>    print('timeout')
>    try:
>       sol = timeout(10, int_wrapper, f, var)
>    except Exception:
>       pass
>
> However, there is weird thing.
> I use django and when I access page for example with function x, it
> correctly outputs x^2/2, but when I access same page withour reloading
> server and wrapper raises timeout, for example, on f=sin(x)**120, integrate
> incorrrectly outputs x sin(x)**120.
> I guess x under sine and integration x are different due to multiprocessing.
> Can somebody clarify situation? Maybe, there is problem with globals?
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "sympy" 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/sympy.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/sympy/10ba58fd-f313-4419-a4e3-27bcb3687a6e%40googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" 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/sympy.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/CAKgW%3D6JE9mfByd9gUVNcJ5KPscR0sXPJMxK5FANTYD094HORqg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to