Run While Loop Concurrently With Flask Server
I'm updating some LEDs using python. I've been doing this like so: from LEDs import * myLEDs = LEDs() done = False while not done: myLEDs.iterate() I wanted to use Flask to act
Solution 1:
Use multiprocess to run the loop in a different process as the Flask HTTP requests:
import time
from flask import Flask, jsonify
from multiprocessing import Process, Value
app = Flask(__name__)
tasks = [
{
'id': 1,
'title': u'Buy groceries',
'description': u'Milk, Cheese, Pizza, Fruit, Tylenol',
'done': False
},
{
'id': 2,
'title': u'Learn Python',
'description': u'Need to find a good Python tutorial on the web',
'done': False
}
]
@app.route('/todo/api/v1.0/tasks', methods=['GET'])defget_tasks():
return jsonify({'tasks': tasks})
defrecord_loop(loop_on):
whileTrue:
if loop_on.value == True:
print("loop running")
time.sleep(1)
if __name__ == "__main__":
recording_on = Value('b', True)
p = Process(target=record_loop, args=(recording_on,))
p.start()
app.run(debug=True, use_reloader=False)
p.join()
The tasks part is from here, multiprocessing code from me. Note the "use_reloader=False" part. This is necessary to avoid running the loop twice. For the reason see here
The functionality can be tested by starting up the server with
python <your_name_for_theexample>.py
and calling
curl -i http://localhost:5000/todo/api/v1.0/tasks
Post a Comment for "Run While Loop Concurrently With Flask Server"