第一份实习工作(1)

本文详细介绍了Python中使用UDP协议进行通信的实现,包括数据发送、接收、日志记录、性能测试和数据处理。通过示例代码展示了如何发送和验证数据,监控CPU及内存使用情况,并进行了性能测试。同时,还涉及到文件读写、日志管理、数据存储和查询等功能。
摘要由CSDN通过智能技术生成

放在全文开头,这次去实习的感受:学到了很多知识,感谢各位大佬的包容,我很惭愧没帮上什么忙,以后要好好学习,记录一下这次经历,如果能帮到他人就更好了nice。


1.电脑须安装pycharm

2.了解UDP通讯

3.代码自动分析

4.日志

5.监控CPU以及内存利用率

6.json格式

7.时间戳

8.pandas模块等

下面为客户端代码:

#!/usr/bin/env python3
# coding: utf-8
import time
import json
import socket
import subprocess
import logging
from datetime import datetime
import psutil
import utils
import csv
import os
import log_utils
import pandas as pd
import glob
import commands
import win32api

# import client
log_utils.make_logger(stream=True, stream_level=logging.WARN)
logger = logging.getLogger(__name__)


# input_batch = 100  # 改1


# 插入数据
def put_data(service_name, key, count):
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    data = {'cmdid': 100}
    # data = json.loads(json.dumps(article_info))  # dumps:字典->字符串  loads:字符串->字典
    param = {"service_name": service_name, 'key': key, 'count': count}
    data['param'] = param
    data = json.dumps(data)
    # count1 = 0
    # data_list = []
    # for i in range(0, count):
    #     data_list.append(i)
    #     if count1 == (input_batch - 1):
    try:
        udp_socket.sendto(data.encode("utf-8"), ("127.0.0.1", 8087))
    except Exception as e:
        logger.info("ERROR: Send fail: {reason}".format(reason=e.reason))
        return False
    # recv_msg2(udp_socket)
    # count1 = 0
    # data_list = []
    # count1 += 1

    # if len(data_list) > 0:
    #     udp_socket.sendto(str(data).encode("utf-8"), ("127.0.0.1", 8087))
    #     logger.info("ERROR: {len}".format(len=len(data_list)))
    # dump_object(data_list)


# 101获取指定数量的数据
def verify_data(service_name, key, triggerEventId, count):
    global ansh
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    data = {'cmdid': 101}
    # data = json.loads(json.dumps(article_info))  # dumps:字典->字符串  loads:字符串->字典
    param = {"service_name": service_name, 'key': key, 'triggerEventId': triggerEventId, 'count': count}
    data['param'] = param
    data = json.dumps(data)
    # print(data)
    # print(type(data))
    # print(key)
    # print(type(key))
    h = key.count(",")
    print("信号的数量为:")
    print(h + 1)  # h+1为信号的数量
    # 字符串以逗号分隔变成多个信号量,组成一个列表
    list1 = key.split(",")
    list1.insert(0, 'timestamp')
    print("除去第一列,其他列为想要查询的信号量:")
    print(list1)
    try:
        udp_socket.sendto(str(data).encode("utf-8"), ("127.0.0.1", 8087))
    except Exception as e:
        logger.info("ERROR: Send fail: {reason}".format(reason=e.reason))
        return False
    # recv_msg(udp_socket)
    recv_msg2(udp_socket)  # 接收查询到的csv文件并保存在桌面

    # 以下为从桌面读取查询到的csv文件并进行测试
    csvx_list = glob.glob('C:\\Users\\Mi\\Desktop\\test\\*.csv')
    print('总共发现%s个CSV文件' % len(csvx_list))
    suml = 0
    list3 = []
    for i in csvx_list:  # i是正在处理的文件名
        csvfile = open(i, encoding='utf-8')
        csvreader = pd.read_csv(csvfile)
        ansl = csvreader.shape[1]
        # print(csvreader.columns.tolist())  # 输出所有列名
        list2 = csvreader.columns.tolist()  # 所有列名
        list3 = list3 + list2
        ansh = csvreader.shape[0]  # 行
        suml = suml + ansl
        # print(suml - 1)  # 每个csv有多少列,这个不重要
        # print(ansh)  # 每个csv有多少行
    print("查询出来的所有信号量:")
    print(list(set(list3)))

    print(suml - len(csvx_list))  # 26列一共
    if (h + 1) == (suml - len(csvx_list)):
        print("查询出来的不同信号量的个数正确。")
    else:
        print("查询出来的不同信号量的个数错误。")

    list1.sort()
    list(set(list3)).sort()
    if list1 == list(set(list3)):
        print("查询出来的不同信号量的名称可以对应上。")
    else:
        print("查询出来的不同信号量的名称不可以对应上。")

    if count == ansh:
        print("查询出来的条数与命令输入想查询出来的条数相等。")
    else:
        print("查询出来的条数与命令输入想查询出来的条数不相等。")


# 102获取指定时间段内的数据
def gets_the_data(service_name, key, triggerEventId, start_time):
    global ansh
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    data = {'cmdid': 102}
    # data = json.loads(json.dumps(article_info))  # dumps:字典->字符串  loads:字符串->字典
    param = {"service_name": service_name, 'key': key, 'triggerEventId': triggerEventId, 'start_time': start_time}
    data['param'] = param
    data = json.dumps(data)
    # print(data)
    # print(type(data))

    h = key.count(",")
    print("信号的数量为:")
    print(h + 1)  # h+1为信号的数量
    # 字符串以逗号分隔变成多个信号量,组成一个列表
    list1 = key.split(",")
    list1.insert(0, 'timestamp')
    print("除去第一列,其他列为想要查询的信号量:")
    print(list1)

    try:
        udp_socket.sendto(str(data).encode("utf-8"), ("127.0.0.1", 8087))
    except Exception as e:
        logger.info("ERROR: Send fail: {reason}".format(reason=e.reason))
        return False
    # recv_msg(udp_socket)
    recv_msg2(udp_socket)  # 接收查询到的数据保存成桌面的csv文件

    csvx_list = glob.glob('C:\\Users\\Mi\\Desktop\\test\\*.csv')
    print('共发现%s个CSV文件' % len(csvx_list))
    suml = 0
    list3 = []
    for i in csvx_list:  # i是正在处理的文件名
        csvfile = open(i, encoding='utf-8')
        csvreader = pd.read_csv(csvfile)
        ansl = csvreader.shape[1]
        # print(csvreader.columns.tolist())  # 输出所有列名
        list2 = csvreader.columns.tolist()  # 所有列名
        list3 = list3 + list2
        ansh = csvreader.shape[0]  # 行
        suml = suml + ansl
        # print(suml - 1)  # 每个csv有多少列,这个不重要
        # print(ansh)  # 每个csv有多少行
        # y = csvreader[["timestamp"]]  # 读取timestamp的值
        # print(y)
        # print(type(y))
        csvreader['timestamp'] = csvreader['timestamp'].astype('object')
        # print("*************************")
        csvreader['timestamp'] = csvreader['timestamp'].astype('int64')
        # print(csvreader['timestamp'])
        # print(type(csvreader))
        print("list4为timestamp的值的列表形式:")
        # print(csvreader.loc[csvreader['timestamp'] > start_time, 'timestamp'].values)
        list4 = csvreader.loc[csvreader['timestamp'] > 0, 'timestamp'].values
        print(list4)
        print("以下输出的为start_time = :")
        print(start_time)
        ok = 0
        for i in list4:
            if i < start_time:
                ok = 1
                print("查询出来的时间段错误。")
                break
        if ok == 0:
            print("查询出来的的时间段正确。")

    print("以下为查询出来的所有信号量:")
    print(list(set(list3)))

    print(suml - len(csvx_list))  # 26列一共
    if (h + 1) == (suml - len(csvx_list)):
        print("查询出来的不同信号量的个数正确。")
    else:
        print("查询出来的不同信号量的个数错误。")

    list1.sort()
    list(set(list3)).sort()
    if list1 == list(set(list3)):
        print("查询出来的不同信号量的名称可以对应上。")
    else:
        print("查询出来的不同信号量的名称不可以对应上。")


# 103 删除指定时间段内的数据
def delete_data(service_name, key, triggerEventId, start_time, time_span):
    global ansh
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    data = {'cmdid': 103}
    # data = json.loads(json.dumps(article_info))  # dumps:字典->字符串  loads:字符串->字典
    param = {"service_name": service_name, 'key': key, 'triggerEventId': triggerEventId, 'start_time': start_time,
             'time_span': time_span}
    data['param'] = param
    data = json.dumps(data)
    # print(data)
    # print(type(data))
    # udp_socket.sendto(str(data).encode("utf-8"), ("127.0.0.1", 8087))

    h = key.count(",")
    print("信号的数量为:")
    print(h + 1)  # h+1为信号的数量
    # 字符串以逗号分隔变成多个信号量,组成一个列表
    list1 = key.split(",")
    list1.insert(0, 'timestamp')
    print("除去第一列,其他列为想要查询的信号量:")
    print(list1)

    try:
        udp_socket.sendto(str(data).encode("utf-8"), ("127.0.0.1", 8087))
    except Exception as e:
        logger.info("ERROR: Send fail: {reason}".format(reason=e.reason))
        return False
    # recv_msg(udp_socket)
    recv_msg2(udp_socket)

    # 2.从桌面读取csv文件后进行筛选
    csvx_list = glob.glob('C:\\Users\\Mi\\Desktop\\test\\*.csv')
    print('共发现%s个CSV文件' % len(csvx_list))
    suml = 0
    list3 = []
    for i in csvx_list:  # i是正在处理的文件名
        csvfile = open(i, encoding='utf-8')
        csvreader = pd.read_csv(csvfile)
        ansl = csvreader.shape[1]
        # print(csvreader.columns.tolist())  # 输出所有列名
        list2 = csvreader.columns.tolist()  # 所有列名
        list3 = list3 + list2
        ansh = csvreader.shape[0]  # 行
        suml = suml + ansl
        # print(suml - 1)  # 每个csv有多少列,这个不重要
        # print(ansh)  # 每个csv有多少行
        # y = csvreader[["timestamp"]]  # 读取timestamp的值
        # print(y)
        # print(type(y))
        csvreader['timestamp'] = csvreader['timestamp'].astype('object')
        # print("*************************")
        csvreader['timestamp'] = csvreader['timestamp'].astype('int64')
        # print(csvreader['timestamp'])
        # print(type(csvreader))
        print("list4为timestamp的值的列表形式:")
        # print(csvreader.loc[csvreader['timestamp'] > start_time, 'timestamp'].values)
        list4 = csvreader.loc[csvreader['timestamp'] > 0, 'timestamp'].values
        print(list4)
        print("以下输出的为start_time = :")
        print(start_time)
        ok = 0
        for i in list4:
            if i < start_time:
                ok = 1
                print("删除查询出来的时间段错误。")
                break
            elif i > start_time + time_span:
                ok = 1
                print("删除查询出来的时间段错误。")
                break
        if ok == 0:
            print("删除查询出来的的时间段正确。")

    print("以下为查询出来的所有信号量:")
    print(list(set(list3)))

    print(suml - len(csvx_list))  # 26列一共
    if (h + 1) == (suml - len(csvx_list)):
        print("查询出来的不同信号量的个数正确。")
    else:
        print("查询出来的不同信号量的个数错误。")

    list1.sort()
    list(set(list3)).sort()
    if list1 == list(set(list3)):
        print("查询出来的不同信号量的名称可以对应上。")
    else:
        print("查询出来的不同信号量的名称不可以对应上。")


# 104 性能测试1
def performance_test01(service_name, key_count, frequency, key_prefix):
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    data = {'cmdid': 104}
    # data = json.loads(json.dumps(article_info))  # dumps:字典->字符串  loads:字符串->字典
    param = {"service_name": service_name, 'key_count': key_count, 'frequency': frequency, 'key_prefix': key_prefix}
    data['param'] = param
    data = json.dumps(data)
    # print(data)
    # print(type(data))
    # udp_socket.sendto(str(data).encode("utf-8"), ("127.0.0.1", 8087))
    try:
        udp_socket.sendto(str(data).encode("utf-8"), ("127.0.0.1", 8087))
    except Exception as e:
        logger.info("ERROR: Send fail: {reason}".format(reason=e.reason))
        return False
    # recv_msg(udp_socket)
    recv_msg2(udp_socket)


# 105 性能测试2
def performance_test02(service_name, value_type, generate_mode):
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    data = {'cmdid': 105}
    # data = json.loads(json.dumps(article_info))  # dumps:字典->字符串  loads:字符串->字典
    param = {"service_name": service_name, 'value_type': value_type, 'generate_mode': generate_mode}
    data['param'] = param
    data = json.dumps(data)
    # print(data)
    # print(type(data))
    # udp_socket.sendto(str(data).encode("utf-8"), ("127.0.0.1", 8087))

    try:
        udp_socket.sendto(str(data).encode("utf-8"), ("127.0.0.1", 8087))
    except Exception as e:
        logger.info("ERROR: Send fail: {reason}".format(reason=e.reason))
        return False
    # recv_msg(udp_socket)
    recv_msg2(udp_socket)


# 106 设置待上传信号列表
def wait_upload(service_name, key):
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    data = {'cmdid': 106}
    # data = json.loads(json.dumps(article_info))  # dumps:字典->字符串  loads:字符串->字典
    param = {"service_name": service_name, 'key': key}
    data['param'] = param
    data = json.dumps(data)
    # print(data)
    # print(type(data))
    # udp_socket.sendto(str(data).encode("utf-8"), ("127.0.0.1", 8087))

    try:
        udp_socket.sendto(str(data).encode("utf-8"), ("127.0.0.1", 8087))
    except Exception as e:
        logger.info("ERROR: Send fail: {reason}".format(reason=e.reason))
        return False
    # recv_msg(udp_socket)
    recv_msg2(udp_socket)


# 107 周期性上传数据
def periodic_upload(service_name, period):
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    data = {'cmdid': 107}
    # data = json.loads(json.dumps(article_info))  # dumps:字典->字符串  loads:字符串->字典
    param = {"service_name": service_name, 'period': period}
    data['param'] = param
    data = json.dumps(data)
    # print(data)
    # print(type(data))
    # udp_socket.sendto(str(data).encode("utf-8"), ("127.0.0.1", 8087))

    try:
        udp_socket.sendto(str(data).encode("utf-8"), ("127.0.0.1", 8087))
    except Exception as e:
        logger.info("ERROR: Send fail: {reason}".format(reason=e.reason))
        return False
    # recv_msg(udp_socket)
    recv_msg2(udp_socket)


# 108 停止周期性上传数据
def stop_period_upload():
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    data = {'cmdid': 108}
    # data = json.loads(json.dumps(article_info))  # dumps:字典->字符串  loads:字符串->字典
    param = {}
    data['param'] = param
    data = json.dumps(data)
    # print(data)
    # print(type(data))
    # udp_socket.sendto(str(data).encode("utf-8"), ("127.0.0.1", 8087))

    try:
        udp_socket.sendto(str(data).encode("utf-8"), ("127.0.0.1", 8087))
    except Exception as e:
        logger.info("ERROR: Send fail: {reason}".format(reason=e.reason))
        return False
    # recv_msg(udp_socket)
    recv_msg2(udp_socket)


# 109 删除指定时间
def delete_specified_time(service_name, time, delete_from_file):
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    data = {'cmdid': 109}
    # data = json.loads(json.dumps(article_info))  # dumps:字典->字符串  loads:字符串->字典
    param = {"service_name": service_name, 'time': time, "delete_from_file": delete_from_file}
    data['param'] = param
    data = json.dumps(data)
    # print(data)
    # print(type(data))
    # udp_socket.sendto(str(data).encode("utf-8"), ("127.0.0.1", 8087))

    try:
        udp_socket.sendto(str(data).encode("utf-8"), ("127.0.0.1", 8087))
    except Exception as e:
        logger.info("ERROR: Send fail: {reason}".format(reason=e.reason))
        return False
    # recv_msg(udp_socket)
    recv_msg2(udp_socket)


def test_put_and_verify_immediatelly():
    logger.info("test_put_and_verify_immediatelly")

    logger.info("put test0")
    put_data("shadow", "signal_test0", 2000)
    logger.info("get test0")
    verify_data("shadow", "signal_test0", 10001, 2000)

    logger.info("put test1")
    put_data("raw", "signal_test1", 200)
    logger.info("get test1")
    verify_data("raw", "signal_test1", 10001, 200)


def test_put_and_verify_until_memdata_exists():
    logger.info("test_put_and_verify_until_memdata_exists")

    logger.info("put test2, test3")
    put_data("raw", "signal_test2", 100000)
    put_data("shadow", "signal_test3", 20000)

    while utils.file_exists("vdata_mem_data") != True:
        logger.info("Get until mem_data_xxx.mmf exist")
        verify_data("raw", "signal_test2", 10002, 100000)
        verify_data("shadow", "signal_test3", 10002, 20000)
        time.sleep(30)

    time.sleep(10)
    logger.info("mem_data_xxx.mmf exist")
    verify_data("raw", "signal_test2", 10002, 100000)
    verify_data("shadow", "signal_test3", 10002, 20000)


def test_put_and_verify_until_store_data_exists():
    logger.info("test_put_and_verify_until_store_data_exists")
    logger.info("put test4, test5")
    put_data("raw", "signal_test4", 120000)
    put_data("shadow", "signal_test5", 20000)

    while utils.file_exists("vdata_store_data") != True:
        logger.info("Get until store_data_xxx.stf exist")
        verify_data("raw", "signal_test4", 10003, 120000)
        verify_data("shadow", "signal_test5", 10003, 20000)
        time.sleep(30)

    time.sleep(10)
    logger.info("store_data_xxx.stf exist")
    verify_data("raw", "signal_test4", 10003, 120000)
    verify_data("shadow", "signal_test5", 10003, 20000)


def test_put_and_verify_after_several_restart():
    logger.info("test_put_and_verify_after_several_restart")

    logger.info("put test6, test7")
    put_data("raw", "signal_test6", 120000)
    put_data("shadow", "signal_test7", 20000)

    cnt = 0
    while cnt < 10:
        verify_data("raw", "signal_test6", 10004, 120000)
        verify_data("shadow", "signal_test7", 10004, 20000)
        cnt += 1

    # time.sleep(10)
    logger.info("store_data_xxx.stf exist")
    verify_data("raw", "signal_test6", 10004, 120000)
    verify_data("shadow", "signal_test7", 10004, 20000)


def recv_msg(udp_socket):  # 查询结果可能有很多条数据,保存到ans.txt中
    recv_data, send_addr = udp_socket.recvfrom(1024)
    with open("C:\\Users\\Mi\\Desktop\\ans.txt", "a") as ans:
        ans.write(str(recv_data.decode("utf-8")) + str(send_addr) + '\n')


# 接收查询到的数据保存到桌面csv文件
def recv_msg2(udp_socket):
    # 1.接收查询到的数据保存在桌面
    # 2.从桌面读取csv文件后进行筛选

    recv_data, send_addr = udp_socket.recvfrom(1024)

    with open("C:\\Users\\Mi\\Desktop\\ans.txt", "a+") as ans:
        ans.write(str(recv_data.decode("utf-8")) + str(send_addr) + '\n')

    # 打开csv文件 将数据写入csv
    csvFile = open("C:\\Users\\Mi\\Desktop\\instance.csv", "a+", newline='')
    writer = csv.writer(csvFile)
    writer.writerow(recv_data)
    csvFile.close()


# 要求:监控CPU和内存占用率
# 监控CPU信息
def cpu():
    cpu = psutil.cpu_count(False)  # cpu核数 默认逻辑CPU核数, False查看真实cpu核数 2
    cpu_per = int(psutil.cpu_percent(1))  # 每秒cpu使用率,(1,true) 每一核cpu的每秒使用率; 36
    # print("请输出每秒的CPU使用率:")
    # print(cpu, cpu_per)
    # print(cpu_per)
    return cpu_per


# 监控内存信息
def mem():
    mem = psutil.virtual_memory()  # 查看内存信息:(total,available,percent,used,free)  # 单位为字节
    mem_total = int(mem[0] / 1024 / 1024)  # 总共多少    字节/1024=千字节  千字节/1024=兆字节  兆字节/1024=吉字节(GB)
    mem_used = int(mem[3] / 1024 / 1024)  # 已经使用了多少
    mem_per = int(mem[2])  # 使用了百分之多少

    a = float(mem[0] / 1024 / 1024 / 1024)
    b = float(mem[3] / 1024 / 1024 / 1024)
    mem_total2 = float('%.2f' % a)
    mem_used2 = float('%.2f' % b)
    mem_info2 = {
        'mem_total': mem_total2,
        'mem_used': mem_used2,
        'mem_per': mem_per,
    }
    print("请输出当前计算机监控的内存信息占用数量其单位为GB:")
    print(mem_info2)

    mem_info = {
        'mem_total': mem_total,
        'mem_used': mem_used,
        'mem_per': mem_per,
    }
    print("请输出当前计算机监控的内存信息占用数量其单位为兆字节:")
    print(mem_info)
    return mem_info


# 间隔一定时间(10秒),输出当前的CPU状态信息
def all_msg():
    msg = []
    now_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    msg.append(now_time)  # 获取时间点
    cpu_info = cpu()
    msg.append(cpu_info)  # cpu 使用率,单位:%
    mem_info = mem()
    msg.append(mem_info['mem_per'])  # 内存使用率,单位:%
    return msg


def test_CPU():
    cnt_times = 1
    while (1):
        msg = all_msg()
        print("以下为获取计算机的时间点  and  CPU使用率%  and  内存使用率%:")
        print(msg)  # 实时打印每隔十秒写入txt的数据。
        with open("C:\\Users\\Mi\\Desktop\\cs_monitor.txt", "a+") as fp:
            b = [str(i) for i in msg]
            # print(b)
            fp.write((','.join(b)) + '\n')
        cnt_times += 1
        # 每隔5秒,统计一次当前计算机的使用情况。
        time.sleep(5)
        if cnt_times > 1:  # 可以随意调整,与等待时间的长短有关
            break


def test_stability():
    # 稳定性测试
    def proc_exist(process_name):
        pl = psutil.pids()  # 返回当前正在运行的PID的排序列表
        for pid in pl:
            if psutil.Process(pid).name() == process_name:
                return pid

    # isinstance:判断一个对象是否为一个已知的类型,判断proc_exist函数是否为int类型
    if isinstance(proc_exist('vdata.exe'), int):
        print('vdata.exe is running')
    else:
        print('vdata.exe is not running...')


def test02():  # question1:可执行程序里面是返回值还是打印值
    cmd = r"C:\\Users\\Mi\\Desktop\\20210727.exe"
    # if os.path.exists(cmd):
    #     # getstatusoutput(cmd):会保存可执行程序中的打印值和主函数的返回值,但不会打印执行命令的输出过程,要再写打印语句才能打印
    #     rc = subprocess.getstatusoutput(cmd)  # subprocess.getstatusoutput()返回计算过程中的所有值
    #     print(rc)  # rc = 0返回值  None  (0, '30')
    # print('*' * 10)

    # os.popen(cmd):将可执行程序中的所有内容打印输出成文件,也不会打印执行过程中输出的内容,通过读文件可以输出所有的打印内容
    f = os.popen(cmd).readlines()
    print(f)  # ['30\n']
    # print(type(f))
    with open("C:\\Users\\Mi\\Desktop\\tmp.txt", "a") as fp:  # 将可执行文件里面的内容写入到txt中
        fp.write(str(f))
    # print('='*10)

    # os.system():会保存打印值和主函数的返回结果,且会将执行过程中要打印的内容打印出来
    # g = os.system(cmd)  # 30  1
    # print(g)
# 已经将可执行程序中打印的内容存到txt中,存的是列表类型,比如['30\n']这样。


def main():
    # win32api.ShellExecute(0, 'open', r'C:\\Users\\Mi\\Desktop\\20210727.exe', '', '', 0)  # 启动可执行文件
    # win32api.ShellExecute(0, 'open', r'chrome.exe', '', '', 1)  # 启动可执行文件
    # print("-----=================----")
    # os.system("taskkill  /f /im chrome.exe")  # 杀死进程

    # udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # test02()

    test_put_and_verify_immediatelly()
    test_put_and_verify_until_memdata_exists()
    test_put_and_verify_until_store_data_exists()
    test_put_and_verify_after_several_restart()
    tis1 = time.perf_counter()  # 计算程序运行的时间,单位为秒。start

    sum = 0
    with open("C:\\Users\\Mi\\Desktop\\109data.json", 'r') as fp:
        for line in fp:
            sum += 1
        # print(sum)
    fp.close()

    with open("C:\\Users\\Mi\\Desktop\\109data.json", 'r') as fp:
        while sum != 0:
            for i in fp.readlines():
                dic = json.loads(i)  # json转换为字典
                dic = eval(dic)
                # print(dic)
                p = dic.get('cmdid')
                service_name = dic.get('param').get('service_name')
                if p == 100:
                    key = dic.get('param').get('key')
                    count = dic.get('param').get('count')
                    put_data(service_name, key, count)
                elif p == 101:
                    key = dic.get('param').get('key')
                    triggerEventId = dic.get('param').get('triggerEventId')
                    count = dic.get('param').get('count')
                    verify_data(service_name, key, triggerEventId, count)
                elif p == 102:
                    key = dic.get('param').get('key')
                    triggerEventId = dic.get('param').get('triggerEventId')
                    start_time = dic.get('param').get('start_time')
                    gets_the_data(service_name, key, triggerEventId, start_time)
                elif p == 103:
                    key = dic.get('param').get('key')
                    triggerEventId = dic.get('param').get('triggerEventId')
                    start_time = dic.get('param').get('start_time')
                    time_span = dic.get('param').get('time_span')
                    delete_data(service_name, key, triggerEventId, start_time, time_span)
                elif p == 104:
                    key_count = dic.get('param').get('key_count')
                    frequency = dic.get('param').get('frequency')
                    key_prefix = dic.get('param').get('key_prefix')
                    performance_test01(service_name, key_count, frequency, key_prefix)
                    test_CPU()
                elif p == 105:
                    value_type = dic.get('param').get('value_type')
                    generate_mode = dic.get('param').get('generate_mode')
                    performance_test02(service_name, value_type, generate_mode)
                    test_CPU()
                elif p == 106:
                    key = dic.get('param').get('key')
                    wait_upload(service_name, key)
                    test_CPU()
                elif p == 107:
                    period = dic.get('param').get('period')
                    periodic_upload(service_name, period)
                elif p == 108:
                    stop_period_upload()
                    test_CPU()
                elif p == 109:
                    time1 = dic.get('param').get('time')
                    delete_from_file = dic.get('param').get('delete_from_file')
                    delete_specified_time(service_name, time1, delete_from_file)
                # tis1 = time.perf_counter()
                test_stability()
                tis2 = time.perf_counter()
                tis = tis2 - tis1
                print("运行时间: %.2f秒" % tis)

                sum -= 1
                if sum == 0:
                    break


if __name__ == '__main__':
    main()




下面为服务端代码:

import socket
import json
import csv


def recv_msg(udp_socket):
    while True:
        a, client_addr = udp_socket.recvfrom(1024)
        b = a.decode()
        data = json.loads(b)  # loads:str->dict
        # 以下是将数据添加到tmp.txt中
        if data["cmdid"] == 100:
            with open("C:\\Users\\Mi\\Desktop\\tmp.txt", "a") as fp:
                fp.write(str(data) + '\n')
                # udp_socket.sendto(b"add data successfully!", client_addr)
        elif data['cmdid'] == 101:  # 101:获取指定数量的数据
            value = list(data.values())
            # value = ','.join(value)
            # value = value.rstrip('\n')
            # value = list(value)
            # print(type(value))  # <class 'list'>
            # print(value)  # ['raw', 'fdsdf', '995', '864']
            csvFile = open("C:\\Users\\Mi\\Desktop\\instance.csv", "a+", newline='')  # 打开csv文件 将读取到的数据写入csv
            writer = csv.writer(csvFile)
            writer.writerow(value)
            csvFile.close()

            # print(type(bytes_s))
            bytes_s = bytes(("gets the specified amount of data:" + str(data)).encode("utf8"))
            udp_socket.sendto(bytes_s, client_addr)
        elif data['cmdid'] == 102:  # 102:获取指定时间段内的数据
            value = list(data.values())
            csvFile = open("C:\\Users\\Mi\\Desktop\\instance.csv", "a+", newline='')  # 打开csv文件 将读取到的数据写入csv
            writer = csv.writer(csvFile)
            writer.writerow(value)
            csvFile.close()

            bytes_s = bytes(("gets the data in the specified time period:" + str(data)).encode("utf8"))
            udp_socket.sendto(bytes_s, client_addr)
        elif data['cmdid'] == 103:  # 103:删除指定时间段内的数据
            value = list(data['param'].values())
            csvFile = open("C:\\Users\\Mi\\Desktop\\instance.csv", "a+", newline='')  # 打开csv文件 将读取到的数据写入csv
            writer = csv.writer(csvFile)
            writer.writerow(value)
            csvFile.close()

            bytes_s = bytes(("delete data for a specified period of time:" + str(data)).encode("utf8"))
            udp_socket.sendto(bytes_s, client_addr)
        elif data['cmdid'] == 104:  # 104:性能测试1
            value = list(data.values())
            csvFile = open("C:\\Users\\Mi\\Desktop\\instance.csv", "a+", newline='')  # 打开csv文件 将读取到的数据写入csv
            writer = csv.writer(csvFile)
            writer.writerow(value)
            csvFile.close()

            bytes_s = bytes(("performance testing one:" + str(data)).encode("utf8"))
            udp_socket.sendto(bytes_s, client_addr)
        elif data['cmdid'] == 105:  # 105:性能测试2
            value = list(data.values())
            csvFile = open("C:\\Users\\Mi\\Desktop\\instance.csv", "a+", newline='')  # 打开csv文件 将读取到的数据写入csv
            writer = csv.writer(csvFile)
            writer.writerow(value)
            csvFile.close()

            bytes_s = bytes(("performance testing two:" + str(data)).encode("utf8"))
            udp_socket.sendto(bytes_s, client_addr)
        elif data['cmdid'] == 106:  # 106:设置待上传信号列表
            value = list(data.values())
            csvFile = open("C:\\Users\\Mi\\Desktop\\instance.csv", "a+", newline='')  # 打开csv文件 将读取到的数据写入csv
            writer = csv.writer(csvFile)
            writer.writerow(value)
            csvFile.close()

            bytes_s = bytes(("set signal list to be uploaded:" + str(data)).encode("utf8"))
            udp_socket.sendto(bytes_s, client_addr)
        elif data['cmdid'] == 107:  # 107:周期性上传数据
            value = list(data.values())
            csvFile = open("C:\\Users\\Mi\\Desktop\\instance.csv", "a+", newline='')  # 打开csv文件 将读取到的数据写入csv
            writer = csv.writer(csvFile)
            writer.writerow(value)
            csvFile.close()

            bytes_s = bytes(("upload data periodically:" + str(data)).encode("utf8"))
            udp_socket.sendto(bytes_s, client_addr)
        elif data['cmdid'] == 108:  # 108:停止周期性上传数据
            value = list(data.values())
            csvFile = open("C:\\Users\\Mi\\Desktop\\instance.csv", "a+", newline='')  # 打开csv文件 将读取到的数据写入csv
            writer = csv.writer(csvFile)
            writer.writerow(value)
            csvFile.close()

            bytes_s = bytes(("stop uploading data periodically:" + str(data)).encode("utf8"))
            udp_socket.sendto(bytes_s, client_addr)
        else:  # 109:删除指定时间的数据
            value = list(data.values())
            csvFile = open("C:\\Users\\Mi\\Desktop\\instance.csv", "a+", newline='')  # 打开csv文件 将读取到的数据写入csv
            writer = csv.writer(csvFile)
            writer.writerow(value)
            csvFile.close()

            bytes_s = bytes(("delete data at specified time:" + str(data)).encode("utf8"))
            udp_socket.sendto(bytes_s, client_addr)


def main():
    server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    server.bind(('', 8087))

    recv_msg(server)

    server.close()


if __name__ == '__main__':
    main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值