iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >怎么使用python中的生成器实现周期性报文发送功能
  • 703
分享到

怎么使用python中的生成器实现周期性报文发送功能

2023-07-05 10:07:15 703人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍了怎么使用python中的生成器实现周期性报文发送功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用Python中的生成器实现周期性报文发送功能文章都会有所收获,下面我们一起来看看吧。使

这篇文章主要介绍了怎么使用python中的生成器实现周期性报文发送功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用Python中的生成器实现周期性报文发送功能文章都会有所收获,下面我们一起来看看吧。

使用python中的生成器实现周期性发送列表中数值的报文发送功能。

功能开发背景:提取cantest工具采集到的现场报文数据,希望使用原始的现场数据模拟验证程序现有逻辑,需要开发一个工具能够自动按照报文发送周期依次发送采集到的报文数据中的一个数值。

功能开发需求:多个报文发送对象共用同一个报文发送线程,多个对象间的报文发送周期不同,多个对象间的总报文发送数据长度不同,能够允许报文发送过程中断及恢复某个对象的报文发送。

功能开发实现逻辑:在固定发送对象某个数值的基础程序版本上增加新的功能,考虑使用python中生成器实现周期性提取对象数值发送报文的功能。

目前只需要发送两个对象的报文数据,先定义两个使用yield生成器:

    def yield_item_value_1(self):        item_value_list = self.item_value_dict[item_list[0]]        for i in range(len(item_value_list)):            yield item_value_list[i]    def yield_item_value_2(self):        item_value_list = self.item_value_dict[item_list[1]]        for i in range(len(item_value_list)):            yield item_value_list[i]

报文发送线程中的run()函数:

    def run(self):        # 实时更新item的被选状态        self.get_checkbox_res_func()        # 获取每个对象的实际物理值        self.get_item_value_dict()        self.item1_value_func = self.yield_item_value_1()        self.item2_value_func = self.yield_item_value_2()        while self.Flag:            if any(msg_send_flag_dict.values()):                # 每隔second秒执行func函数                timer = Timer(0.01, self.tick_10ms_func)                timer.start()                self.send_working_msg(self.working_can_device, self.working_can_channel)                timer.join()            else:                mes_info = "Goodbye *** 自动发送所有报文数据结束!!!"                toastone = wx.MessageDialog(None, mes_info, "信息提示",                                            wx.YES_DEFAULT | wx.ICON_QUESTioN)                if toastone.ShowModal() == wx.ID_YES:  # 如果点击了提示框的确定按钮                    toastone.Destroy()  # 则关闭提示框                break

报文周期性发送函数:

    def send_working_msg(self, can_device, device_id):        for idx in range(len(item_list)):            if msg_send_flag_dict[item_list[idx]] == 1:                msg_id_idx = msg_operation_list.index("报文ID") - 1                msg_id = eval(str(self.operation_dict[item_list[idx]][msg_id_idx]).strip())                # 获取报文发送帧类型                msg_type_idx = msg_operation_list.index("帧类型") - 1                msg_type = str(self.operation_dict[item_list[idx]][msg_type_idx])                msg_type = 1 if msg_type == "扩展帧" else 0                # 获取报文发送周期                msg_cycle_idx = msg_operation_list.index("周期(ms)") - 1                msg_cycle = int(self.operation_dict[item_list[idx]][msg_cycle_idx])                send_cycle = msg_cycle / 10                if msg_tick_10ms_dict["_".join(["tick", "10ms", str(idx)])] >= send_cycle:                    # 开始喂值                    if idx == 0:                        try:                            item_phyValue = next(self.item1_value_func)                        except StopIteration:                            msg_send_flag_dict[item_list[idx]] = 0                            continue                    else:                        try:                            item_phyValue = next(self.item2_value_func)                        except StopIteration:                            msg_send_flag_dict[item_list[idx]] = 0                            continue                    msg_data = self.get_item_msg(item_list[idx], item_phyValue)                    if send_msg(msg_id, msg_type, msg_data, can_device, device_id, 0):                        print("发送报文成功")                        # print("msg_data", msg_data)                        msg_tick_10ms_dict["_".join(["tick", "10ms", str(idx)])] = 0                    else:                        pass                        # print("发送报文失败")                        # mes_info = "发送报文失败"                        # toastone = wx.MessageDialog(None, mes_info, "信息提示",                        #                             wx.YES_DEFAULT | wx.ICON_QUESTION)                        # if toastone.ShowModal() == wx.ID_YES:  # 如果点击了提示框的确定按钮                        #     toastone.Destroy()  # 则关闭提示框

功能实现逻辑的待优化点:存在多个对象就需要定义多个存储报文数据的生成器。

上述功能实现逻辑优化如下:

    def set_yield_func(self):        item_yield_func_dict = dict()        for i in range(len(item_list)):            item_yield_func_dict[item_list[i]] = self.yield_item_value(i)        return item_yield_func_dict    def yield_item_value(self, item_idx):        item_value_list = self.item_value_dict[item_list[item_idx]]        for i in range(len(item_value_list)):            yield item_value_list[i]

报文发送线程的run()函数中调用这个存储对象报文发送数据生成器的字典item_yield_func_dict:

    def run(self):        # 实时更新item的被选状态        self.get_checkbox_res_func()        # 获取每个对象的实际物理值        self.get_item_value_dict()        self.item_yield_func_dict = self.set_yield_func()        …………

从存储每个对象生成器的字典item_yield_func_dict中获取生成器对象:

                    try:                        item_phyValue = next(self.item_yield_func_dict[item_list[idx]])                    except StopIteration:                        msg_send_flag_dict[item_list[idx]] = 0                        continue

关于“怎么使用python中的生成器实现周期性报文发送功能”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“怎么使用python中的生成器实现周期性报文发送功能”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网Python频道。

--结束END--

本文标题: 怎么使用python中的生成器实现周期性报文发送功能

本文链接: https://www.lsjlt.com/news/351055.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么使用python中的生成器实现周期性报文发送功能
    这篇文章主要介绍了怎么使用python中的生成器实现周期性报文发送功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用python中的生成器实现周期性报文发送功能文章都会有所收获,下面我们一起来看看吧。使...
    99+
    2023-07-05
  • python中的生成器实现周期性报文发送功能
    使用python中的生成器实现周期性发送列表中数值的报文发送功能。 功能开发背景:提取cantest工具采集到的现场报文数据,希望使用原始的现场数据模拟验证程序现有逻辑,需要开发一个...
    99+
    2023-03-08
    python 周期性报文发送 python 周期发送
  • python使用requests实现发送带文件请求功能
    目录1. requests发送文件功能2. requests发送多个文件请求3. Django 接收文件1. requests发送文件功能 Requests 使得上传多部分编码文件变...
    99+
    2022-12-08
    python requests发送文件请求 python requests发送请求
  • 怎么使用PHP实现发送邮件的功能
    今天小编给大家分享一下怎么使用PHP实现发送邮件的功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、PHP发邮件的基本原...
    99+
    2023-07-05
  • python中怎么使用yagmail发送邮件功能
    本篇内容主要讲解“python中怎么使用yagmail发送邮件功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python中怎么使用yagmail发送邮件功能”吧!使用前先要安装 yagmai...
    99+
    2023-06-22
  • 使用Java怎么实现发送报文与接收报文
    这篇文章将为大家详细讲解有关使用Java怎么实现发送报文与接收报文,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。发送报文先创建生成报文的方法,添加了xml数据public Stri...
    99+
    2023-06-14
  • 使用JAVA实现邮件发送功能的图文教程
    目录一、准备工作1.1 登录网页QQ邮箱,点击页面顶部设置按钮。1.2 点击后会打开邮箱设置页面,如下所示,点击第二栏账户。1.3 点击后往下拉,直到有如下页面选项。1.4 验证完成...
    99+
    2024-04-02
  • SpringBoot中的利用Email发送功能怎么利用Thymeleaf实现
    本篇文章为大家展示了SpringBoot中的利用Email发送功能怎么利用Thymeleaf实现,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。添加依赖(Mail starter dependenci...
    99+
    2023-05-31
    springboot thymeleaf email
  • Python中的生成器怎么实现
    本篇内容主要讲解“Python中的生成器怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python中的生成器怎么实现”吧!前言生成器很容易实现,但却不容易理解。生成器也可用于创建迭代器,...
    99+
    2023-06-29
  • 使用python怎么实现生成器与文件系统
    使用python怎么实现生成器与文件系统?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、生成器首先解释迭代器。能以一种一致的方式对序列进行迭代(比如列表中的对象或文件中的行)...
    99+
    2023-06-15
  • Android开发中怎么实现一个长按将文章生成图片的功能
    这篇文章将为大家详细讲解有关Android开发中怎么实现一个长按将文章生成图片的功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。长按菜单实现WebView可以如下实现:mWebView.s...
    99+
    2023-05-31
    android roi
  • 怎么使用Java第三方实现发送短信功能
    本文小编为大家详细介绍“怎么使用Java第三方实现发送短信功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用Java第三方实现发送短信功能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、介绍在项目开发...
    99+
    2023-07-05
  • 使用python爬虫怎么实现一个发送短信验证码功能
    本篇文章为大家展示了使用python爬虫怎么实现一个发送短信验证码功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。内联代码片。import timedef get_time()...
    99+
    2023-06-06
  • 怎么使用Java自带的mail API实现邮件发送功能
    本篇内容主要讲解“怎么使用Java自带的mail API实现邮件发送功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Java自带的mail API实现邮件发送功能”...
    99+
    2023-07-05
  • 使用python实怎么编写一个自动发送弹幕功能
    这期内容当中小编将会给大家带来有关使用python实怎么编写一个自动发送弹幕功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。基本开发环境· Python 3.6· Pycharm相关模块使用import...
    99+
    2023-06-06
  • Python怎么调用ChatGPT的API实现文章生成
    这篇“Python怎么调用ChatGPT的API实现文章生成”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python怎么调...
    99+
    2023-07-05
  • 怎么在Java中利用JavaMail实现一个邮件发送功能
    这期内容当中小编将会给大家带来有关怎么在Java中利用JavaMail实现一个邮件发送功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. 电子邮件协议电子邮件的在网络中传输和网页一样需要遵从特定的协议...
    99+
    2023-05-31
    java javamail ava
  • 使用Spring Boot怎么样实现一个验证码生成功能
    这篇文章给大家介绍使用Spring Boot怎么样实现一个验证码生成功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、验证码生成类import java.awt.*;import java.awt.image.Bu...
    99+
    2023-05-31
    springboot spring boo
  • 怎么在python中利用生成器实现协程
    这篇文章给大家介绍怎么在python中利用生成器实现协程,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其最初的设计是用于...
    99+
    2023-06-14
  • 怎么在Android应用中实现一个语音消息发送功能
    本篇文章为大家展示了怎么在Android应用中实现一个语音消息发送功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。直接上代码://语音操作对象private MediaPlayer&nb...
    99+
    2023-05-30
    android roi
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作