Skip to content Skip to sidebar Skip to footer

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"