MQTT簡介之十三--Ubuntu下Mosquitto python3實現的訂閱端 性能測試

1、ubuntu硬件配置

         4核,8G內存,磁盤50G,ubuntu16.04

2、python 啓動單進程代碼

#!/usr/bin/python3
import paho.mqtt.client as mqtt
import psutil
import os
import datetime
import sys
from datetime import *

#MQTTHOST = "10.10.40.242"
MQTTHOST = "114.115.223.53"
MQTTPORT = 1883
MQTTTOPIC = "caoft/test/"
mqttClient = mqtt.Client()

def get_head_info():
    try:
        raise Exception
    except:
        f = sys.exc_info()[2].tb_frame.f_back
    return '%s, %s, %s, %s, %d' % (str(datetime.now()), f.f_code.co_filename, f.f_code.co_name, str(f.f_lineno),os.getpid())


def print_time(message,flag):
        print ("%s message=%s" % (get_head_info(),message))
        if(flag):
            pid = os.getpid()
            p = psutil.Process(pid)
            print('----------------')
            # 進程ID
            print('Process id : %d' % pid)
            # 進程NAME
            print('Process name : %s' % p.name())
            # 獲取進程bin路徑
            print('Process bin  path : %s' % p.exe())
            # 獲取pid對應的路徑
            print('Process path : %s' % p.cwd())
            # 進程狀態
            print('Process status : %s' % p.status())
            # 進程運行時間
            print('Process creation time : %s' % datetime.datetime.fromtimestamp(p.create_time()).strftime(
                "%Y-%m-%d %H:%M:%S"))
            # CPU使用情況
            print(p.cpu_times())
            # 內存使用情況
            print('Memory usage : %s%%' % p.memory_percent())
            # 硬盤讀取信息
            print(p.io_counters())
            # 打開進程socket的namedutples列表
            print(p.connections())
            # 此進程的線程數
            print('Process number of threads : %s' % p.num_threads())

# 連接MQTT服務器
def mqtt_connect():
    mqttClient.connect(MQTTHOST, MQTTPORT, 60)
    mqttClient.loop_start()


# 消息處理函數
def mqtt_message_come(lient, userdata, msg):
    print(get_head_info()+" mqtt_message_come")
    print(get_head_info()+" "+ msg.topic + ":" + str(msg.payload.decode("utf-8")))

# subscribe 消息訂閱
def mqtt_subscribe(mqtt_topic):
    mqttClient.subscribe(mqtt_topic, 1)  # 主題爲"test"
    mqttClient.on_message = mqtt_message_come  # 消息到來處理函數
    print(get_head_info() + " mqtt_subscribe " + mqtt_topic)

# publish 消息發佈
def mqtt_publish(topic, msg, qos):
    mqttClient.publish(topic, msg, qos)

def mqtt_subscribe_test(mqtt_topic):
    mqtt_connect()
    mqtt_subscribe(mqtt_topic)

def main(mqtt_topic):
    mqtt_subscribe_test(mqtt_topic)
    while True:
        pass


if __name__ == '__main__':
    #print(get_head_info()+'參數個數爲:', len(sys.argv), '個參數。')
    #print(get_head_info()+'參數列表:', str(sys.argv))
    #print(get_head_info()+'參數列表:', sys.argv[1])
    main(MQTTTOPIC+str(sys.argv[1]))

3、多進程測試實例 shell腳本啓動

#!/bin/bash
#python3 mqtt_sub.py 1 &
#python3 mqtt_sub.py 2 &
counter=1
loop=700#啓動的進程數量
b=0
while true
do
    echo "counter==" $counter
    counter=$[counter+1]
    b=$(( $counter % 5 ))
    #sleep 1
    python3 mqtt_sub.py $counter &
    if [ $counter == $loop ] ; then
	break;
    fi
    if [ $b == 0 ] ; then
 	sleep 1
    fi
done

4、結論

       ubuntu環境這樣啓動python程序最多支持600個客戶端,經過推測應該是python程序的問題,壓測失敗。但是python單實例測試發佈和訂閱是沒有問題的

       發現這個問題以後,提出改進使用mosquitto自帶的mosquitto_sub功能測試

      MQTT簡介之十四--Ubuntu下Mosquitto shell  mosquitto_sub 性能測     https://blog.csdn.net/caofengtao1314/article/details/106812135

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章