将队列移出课堂

2024-09-30 04:27:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我在这里真是摸不着头脑,试图为我创建的一个类编写一个环回测试,结果出现了一些奇怪的行为。持有队列的类似乎相当高兴,可以将数据放入其队列中。但是调用该类的函数似乎并不认为队列中有任何内容。由于这是一个独立的单元测试,没有其他任何东西试图访问此队列

代码看起来像这样

#mymqtt.py
import paho.mqtt.client as mqtt
import Queue

class mqttcomms:
    def __init__(self, address, topiclist, monitorlist):
    #   ....
        self.msgqueue = Queue.Queue()
    # ....
    def on_message(self, client, userdata, msg):
    #   .... something that creates;
        newmsg = ['something','in','here']

        self.msgqueue.put(newmsg)
        print 'Message put in queue: ' + str(not(self.msgqueue.empty()))


# tests.py
import mymqtt
# ....
minortest('Basic Loopback')
##############  Basic Loopback ##############
testMQserver = 'localhost'
topiclist = ['test']
monitorlist = ['var1', 'var2']
mqttComms = mymqtt.mqttcomms(testMQserver, topiclist, monitorlist)

message = 'Hello'
mqttComms.publishmessage(topiclist[0], monitorlist[0], message)
message_ok = False

time.sleep(5)

print 'Message in Queue: ' + str(not(mqttComms.msgqueue.empty()))

while not mqttComms.msgqueue.empty():
    print 'Something in Queue'
    msg = mqttComms.msgqueue.get()
    print msg

    checks = 0
    if msg[0] == topiclist[0]:
        checks += 1
    if msg[1] == monitorlist[0]:
        checks += 1
    if msg[2] == message:
        checks += 1

    if checks == 3:
        message_ok = True

我得到的是

BASIC LOOPBACK 
MQTT: Connected to Server
MQTT: Published Hello to /test/var1
MQTT: Msg Received: test/var1 Hello
Message put in queue: True
Message in Queue: False

有什么想法吗?如果有人能解释为什么会发生这种情况,我将非常感激,提前谢谢


Tags: inselfmessageif队列queuemsgprint

热门问题