librelist archives

« back to archive

Start/Stop Flask

Start/Stop Flask

From:
eduardo
Date:
2011-01-10 @ 13:30
Hi.

Is there a way of using Flasp as a thread?
I mean, doing things like:

app = Flask(__name__)
...
app.run()
...
...
app.stop()<= ????


Regards,
eduardo.

Re: [flask] Start/Stop Flask

From:
Simon Sapin
Date:
2011-01-10 @ 14:03
Le 10/01/2011 22:30, eduardo a écrit :
> Hi.
>
> Is there a way of using Flasp as a thread?
> I mean, doing things like:
>
> app = Flask(__name__)
> ...
> app.run()
> ...
> ...
> app.stop()<= ????

Hi,

On Python 2.6+ I’d do something like this:

server = multiprocessing.Process(target=app.run)
server.start()
# ...
server.terminate()
server.join()

See 
http://docs.python.org/library/multiprocessing.html#multiprocessing.Process

Regards,
-- 
Simon Sapin
http://exyr.org/

Re: [flask] Start/Stop Flask

From:
eduardo
Date:
2011-01-10 @ 14:55
Hi, thanks.

But...

I tried this:

import time
from multiprocessing import Process
from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
         return "Hi there!!!"

if __name__ == '__main__':

     app.debug = True

     print "starting process"
     server = Process(target=app.run)
     server.start()

     print "sleeping"
     time.sleep(5)

     print "ending process"
     server.terminate()
     server.join()

     print "bye..."


ang got this:

 >pythonw -u "app.py"
starting process
Traceback (most recent call last):
   File "app.py", line 16, in <module>
     server.start()
   File "C:\Python27\lib\multiprocessing\process.py", line 104, in start
     self._popen = Popen(self)
   File "C:\Python27\lib\multiprocessing\forking.py", line 244, in __init__
     dump(process_obj, to_child, HIGHEST_PROTOCOL)
   File "C:\Python27\lib\multiprocessing\forking.py", line 167, in dump
     ForkingPickler(file, protocol).dump(obj)
   File "C:\Python27\lib\pickle.py", line 224, in dump
     self.save(obj)
   File "C:\Python27\lib\pickle.py", line 331, in save
     self.save_reduce(obj=obj, *rv)
   File "C:\Python27\lib\pickle.py", line 419, in save_reduce
     save(state)
   File "C:\Python27\lib\pickle.py", line 286, in save
     f(self, obj) # Call unbound method with explicit self
   File "C:\Python27\lib\pickle.py", line 649, in save_dict
     self._batch_setitems(obj.iteritems())
   File "C:\Python27\lib\pickle.py", line 681, in _batch_setitems
     save(v)
   File "C:\Python27\lib\pickle.py", line 286, in save
     f(self, obj) # Call unbound method with explicit self
   File "C:\Python27\lib\multiprocessing\forking.py", line 40, in dispatcher
     self.save_reduce(obj=obj, *rv)
   File "C:\Python27\lib\pickle.py", line 401, in save_reduce
     save(args)
   File "C:\Python27\lib\pickle.py", line 286, in save
     f(self, obj) # Call unbound method with explicit self
   File "C:\Python27\lib\pickle.py", line 548, in save_tuple
     save(element)
   File "C:\Python27\lib\pickle.py", line 331, in save
     self.save_reduce(obj=obj, *rv)
   File "C:\Python27\lib\pickle.py", line 419, in save_reduce
     save(state)
   File "C:\Python27\lib\pickle.py", line 286, in save
     f(self, obj) # Call unbound method with explicit self
   File "C:\Python27\lib\pickle.py", line 649, in save_dict
     self._batch_setitems(obj.iteritems())
   File "C:\Python27\lib\pickle.py", line 681, in _batch_setitems
     save(v)
   File "C:\Python27\lib\pickle.py", line 331, in save
     self.save_reduce(obj=obj, *rv)
   File "C:\Python27\lib\pickle.py", line 419, in save_reduce
     save(state)
   File "C:\Python27\lib\pickle.py", line 286, in save
     f(self, obj) # Call unbound method with explicit self
   File "C:\Python27\lib\pickle.py", line 649, in save_dict
     self._batch_setitems(obj.iteritems())
   File "C:\Python27\lib\pickle.py", line 681, in _batch_setitems
     save(v)
   File "C:\Python27\lib\pickle.py", line 286, in save
     f(self, obj) # Call unbound method with explicit self
   File "C:\Python27\lib\pickle.py", line 649, in save_dict
     self._batch_setitems(obj.iteritems())
   File "C:\Python27\lib\pickle.py", line 681, in _batch_setitems
     save(v)
   File "C:\Python27\lib\pickle.py", line 286, in save
     f(self, obj) # Call unbound method with explicit self
   File "C:\Python27\lib\pickle.py", line 748, in save_global
     (obj, module, name))
pickle.PicklingError: Can't pickle <function <lambda> at 0x012904B0>: 
it's not found as jinja2.defaults.<lambda>
 >Exit code: 1


:(

regards,

eduardo

PS: English isn't my primray language so sorry for any mistake.

Em 10/1/2011 12:03, Simon Sapin escreveu:
> Le 10/01/2011 22:30, eduardo a écrit :
>> Hi.
>>
>> Is there a way of using Flasp as a thread?
>> I mean, doing things like:
>>
>> app = Flask(__name__)
>> ...
>> app.run()
>> ...
>> ...
>> app.stop()<= ????
> Hi,
>
> On Python 2.6+ I’d do something like this:
>
> server = multiprocessing.Process(target=app.run)
> server.start()
> # ...
> server.terminate()
> server.join()
>
> See
> http://docs.python.org/library/multiprocessing.html#multiprocessing.Process
>
> Regards,

Re: [flask] Start/Stop Flask

From:
Simon Sapin
Date:
2011-01-10 @ 23:44
Le 10/01/2011 23:55, eduardo a écrit :
> pickle.PicklingError: Can't pickle<function<lambda>  at 0x012904B0>:
> it's not found as jinja2.defaults.<lambda>

Instead of

if __name__ == '__main__':
      server = Process(target=app.run)


Try:

def run():
     app.run()

if __name__ == '__main__':
      server = Process(target=run)

See http://docs.python.org/library/multiprocessing.html#windows

Regards,
-- 
Simon Sapin

Re: [flask] Start/Stop Flask

From:
eduardo
Date:
2011-01-11 @ 02:36
It worked!

Thanks a lot.


best regards,

eduardo

Em 10/1/2011 21:44, Simon Sapin escreveu:
> Le 10/01/2011 23:55, eduardo a écrit :
>> pickle.PicklingError: Can't pickle<function<lambda>   at 0x012904B0>:
>> it's not found as jinja2.defaults.<lambda>
> Instead of
>
> if __name__ == '__main__':
>        server = Process(target=app.run)
>
>
> Try:
>
> def run():
>       app.run()
>
> if __name__ == '__main__':
>        server = Process(target=run)
>
> See http://docs.python.org/library/multiprocessing.html#windows
>
> Regards,