线程阻塞了控制台

时间:2019-01-28 17:29:32

标签: python multithreading timer raspberry-pi mqtt

我目前正在研究一个小的MQTT-Projekt,我想将树莓派连接到Windows PC。两者之间的连接可以正常工作,但是问题在于PC(MQTT-Broker处于打开状态)的启动晚于pi,因此必须延迟连接。

我在$data = json_decode($response["body"]); $shippingCost = $data->data->amount; session_start(); $_SESSION['shippingCost'] = $shippingCost;方法周围做了一会儿循环,因此它将每2秒尝试连接一次。但以我为例,它尝试5次然后停止。

我还实现了一个线程,该线程启动计时器以检查是否收到消息。计时器的问题是,有时它会从20秒跳到100秒。

我想我误解了线程,但我犯了一个错误,但我不知道在哪里。

我的代码如下:

client.connect()

运行该程序将输出:

import threading
import time
import paho.mqtt.client as mqtt

shutdown = 0

def on_connect(client, userdata, flags, rc):
   print("Connected with result code "+str(rc))
   client.subscribe("CoreElectronics/test")
   client.subscribe("CoreElectronics/topic")

def on_message(client, userdata, msg):
   global shutdown
   shutdown = time.time()
   print(msg.topic+" "+str(msg.payload))

def check_connect():
   try:
      client.connect("192.168.xx.xx", 1883, 60)
      return True
   except:
      print("No connection")
      return False

def timer_count():
    global shutdown
    shutdown = time.time()
    elapsed = 0
    while elapsed < 10:
         elapsed = time.time()-shutdown
         print("no Message")
         time.sleep(2)

t1 = threading.Thread(target = timer_count)
t1.start()

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

while(True):
    if check_connect():
        break;
    else:
       time.sleep(2)


client.loop_forever()

但是在我的情况下,它应该始终同时打印出这两件事。 在没有打印出No Message No Connection No Message No Message No Message No Message 之后,它在运行时也没有连接到No Connection

1 个答案:

答案 0 :(得分:0)

我通过不做client.connect(xxx)的while循环来使其工作。我首先检查了netiface库是否存在该接口,然后尝试连接到该接口。在这种情况下,它等待连接,然后开始工作。感谢@JohnAnderson,我了解到client.connect(xxx)被阻止,因此导致了一些问题。