Всем доброго! Подскажите пожалуйста как правильно использовать очереди в связке с Flask.
Я вроде как то и ррикрутил их к своему Flask серверу, но не уверен, что правильно.
Вот пример моей реализации:
from Queue import Queue
import threading
from flask import Flask
class Sender(object):
def send(self):
# sending...
return "sended"
senderManager = Sender()
app = Flask(__name__)
q = Queue()
t = threading.Thread(target=q_worker)
t.setDaemon(True)
t.start()
def send_command(item):
senderManager.send(item)
def q_worker():
while True:
item = q.get()
send_command(item)
q.task_done()
@app.route("/action", methods=['POST'])
def action():
item = request.json['item']
q.put(item)
return "added to q"
q.join()
if __name__ == '__main__':
app.run(host='0.0.0.0', port=port)
Нужно чтобы при получения запроса на
/action, отправить действия через метод
send (отправка команды на железо) класа
Sender, процес которого занимает некоторое время, и если не дождатся его выполнения и вызвать этот метод снова (при получении очередного POST запроса), новый
sender не отработает корректно, так как железо, на которое была отправлена предыдущая команда, еще не закончило работу, и новая команда будет просто не выполнена. Поетому нужно, чтобы при получении нескольких
POST запросов подряд, создавалась очередь, и постепенно выполнялся новый
Sender.send из этой очереди, только после выполнения предыдущего.
P.S. Особенно не уверен в месте расположения
q.join()