Как разделить очередь между двумя потоками? - PullRequest
0 голосов
/ 29 сентября 2018

Я пытаюсь реализовать службу REST в Python с FLASK, которая предоставляет данные GPS.Данные GPS считываются с устройства, доступ к которому осуществляется через COM-порт.Основная точка входа моего приложения выглядит следующим образом.Там я создаю API REST и создаю экземпляр класса, который отвечает за чтение с COM-порта:

from flask import Flask
from flask_restful import Api, Resource
from GPS import GPSParser

gpsparser = GPSParser()

app = Flask(__name__)
api = Api(app)


class GPS(Resource):
    def get(self):
        if gpsparser.gpsQueue.qsize() > 0:
            element = gpsparser.gpsQueue.get_nowait()
            return element, 200
        return "", 204

api.add_resource(GPS, "/gps")
app.run(debug=True)

Класс GPSParser выглядит следующим образом:

class GPSParser:
    def __init__(self):
        self.ser = serial.Serial('/dev/ttyUSB0', 4800, timeout=None)
        manager = multiprocessing.Manager()
        self.gpsQueue = manager.Queue()
        thread = Thread(target=self.readgpsvalues)
        thread.start()

Я постоянно читаю изCOM-порт и положить данные в очередь.Используя операторы отладки, я знаю, что это успешно, и очередь не пуста.

Проблема в том, что когда я вызываю метод get из REST API, я всегда получаю 204 в качестве ответа, потому что очередьпустой.Понятия не имею почему.Есть намеки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...