Python多线程模拟多发送端使用mqtt向服务器thingsboard多设备接收端发送消息

下面代码是模拟3个发送设备同时向3个接收设备发送5次消息

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

def on_connect(client, userdata, flags, rc):
    print("Connected with result code: " + str(rc))

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

send_num_global = 0
errorsend_num_global = 0
def func(name, message, thread_id, client, send_num):
    global send_num_global
    global errorsend_num_global
    for iter_num in range(5):
        time.sleep(1) #每隔2秒发送一次消息
        print(f"{name}开始")
        # print(f"{message}")
        id = '{"id' + str(thread_id+1) + '":' + str(send_num) + '}'
        # print(id)
        rt = client.publish('v1/devices/me/telemetry', payload=id, qos=0)
        print(list(rt))
        if list(rt)[0] != 0:
            errorsend_num_global += 1 #统计一共错发的次数
        send_num_global += 1 #统计一共发送的次数
        send_num += 1 #统计单个设备发送的次数
        print({"错发次数":errorsend_num_global, "总发次数":send_num_global})
           
# 开启多线程
def duoxiancheng():
    for username_id in range(3): #迭代服务器接受端设备的个数
        username_list = ["DqleDovP7M61QtBStKX0", "KkvXOjyfiHk65qLuYCJj", "pm3jdmtK78enWR3tv7iU"] #这里是三个接收设备的令牌,要换成自己的
        client = mqtt.Client() 
        password = "" #密码设为空字符串
        client.username_pw_set(username_list[username_id], password)
        client.on_connect = on_connect
        client.on_message = on_message
        client.connect('your_server_ip', 1883, 600)  # your_server_ip为你服务器的ip,1883为默认的端口,600为keepalive的时间间隔
        send_num = 1
        for client_id in range(3): #迭代发送端设备的个数
            test = Thread(target=func, args=("线程"+str(client_id + 1), "开始发送数据", client_id, client, send_num))
            test.start()
            time.sleep(0.1) #每隔0.1秒开启一个线程

if __name__ == '__main__':
        duoxiancheng()

下面代码模拟3个发送设备分别向3个接收设备一一对应发送5次消息

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

def on_connect(client, userdata, flags, rc):
    print("Connected with result code: " + str(rc))

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

send_num_global = 0
errorsend_num_global = 0
def func(name, message, thread_id, client, send_num):
    global send_num_global
    global errorsend_num_global
    for iter_num in range(5):
        time.sleep(0.5)
        print(f"{name}开始")
        # print(f"{message}")
        id = '{"id' + str(thread_id+1) + '":' + str(send_num) + '}'
        # print(id)
        rt = client.publish('v1/devices/me/telemetry', payload=id, qos=0)
        if list(rt)[0] != 0:
            errorsend_num_global += 1 #统计一共错发的次数
        send_num_global += 1 #统计一共发送的次数
        send_num += 1 #统计单个设备发送的次数
    # return {"错发次数":errorsend_num, "总发次数":send_num}
    print({"错发次数": errorsend_num_global, "总发次数": send_num_global})
         
# 开启多线程
def duoxiancheng():
    for client_id in range(3):  #迭代发送端设备的个数
        username_list = ["DqleDovP7M61QtBStKX0", "KkvXOjyfiHk65qLuYCJj", "pm3jdmtK78enWR3tv7iU"]
        client = mqtt.Client() 
        password = ""

        client.username_pw_set(username_list[client_id], password)
        client.on_connect = on_connect
        client.on_message = on_message
        client.connect('your_server_ip', 1883, 600)  # your_server_ip为你服务器的ip,1883为默认的端口,600为keepalive的时间间隔
        send_num = 1
        test = Thread(target=func, args=("线程" + str(client_id + 1), "开始发送数据",
                client_id, client, send_num))
        test.start()
        time.sleep(0.1)

if __name__ == '__main__':
        duoxiancheng()

Done!

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CrystalheartLi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值