如何在两个线程之间共享队列?

时间:2018-09-29 16:10:24

标签: python python-3.x multithreading rest queue

我尝试使用FLASK在Python中实现REST服务,该服务提供GPS数据。从通过COM端口访问的设备读取GPS数据。我的应用程序的主要入口点看起来像这样。我在那里创建REST api,并实例化负责从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端口读取数据并将数据放入队列。使用调试语句,我知道这是成功的,并且队列不为空。

问题是,当我从REST API调用get方法时,由于队列为空,所以我总是得到204作为响应。我不知道为什么。有提示吗?

0 个答案:

没有答案