Python创建多个线程分别启动http、WebSocket服务

embedded/2024/10/19 3:29:54/
http://www.w3.org/2000/svg" style="display: none;">

我的计划是启动主程序后新建3个独立的线程,一个线程执行PLC读取,一个线程启动工艺测试(含http服务),另外一个线程启动WebSocket。

新增 /lib/PlcReader.py

python"># 执行 PLC 读取类
# 读取 PLC 配置文件
# 定时(每秒)读取PLC值,发送到内存模块中,并通过 WebSocket 发送给所有连接客户端import timeclass PlcReader(object):def __init__(self, job_name):self.jobName = job_nameself.readPlcValueConfigList = []def run(self):print("PLC读取模块启动")self.read_config()# 定时读取 PLC 的值while True:self.read_plc_value()time.sleep(1)def read_config(self):print("读取 PLC 配置文件")self.readPlcValueConfigList = [{"name": "aaa"}]def refresh_config(self):print("更新 PLC 配置文件")self.readPlcValueConfigList = []def read_plc_value(self):print("读取 PLC 值")# 如有没有读取配置列表,则不读取if not self.readPlcValueConfigList or len(self.readPlcValueConfigList) == 0:print("如有没有读取配置列表")returnprint("去更新内存中的PLC值,并通过WebSocket发送给所有连接客户端")

新增/lib/ProcessTester.py

python"># 工艺测试主程序
# 提供初始化工艺
# 提供开始执行
# 提供暂定执行
# 提供结束执行(紧急停止可调用)
# 提供手动调节
# 对外提供 http 调用服务,通过 http 调用来执行工艺的测试过程(初始化工艺、开始执行、暂停执行、结束执行、手动调节)import http.server
import socketserver
class HTTPRequestHandler(http.server.BaseHTTPRequestHandler):def do_GET(self):self.send_response(200)self.send_header('Content-type', 'text/html')self.end_headers()message = "Hello, World!"self.wfile.write(bytes(message, "utf8"))returndef do_POST(self):self.send_response(200)self.send_header('Content-type', 'text/html')self.end_headers()message = "Hello, World2!"self.wfile.write(bytes(message, "utf8"))returnclass ProcessTester:def __init__(self, port):self.handler = HTTPRequestHandlerself.port = portdef start(self):with socketserver.TCPServer(("", self.port), self.handler) as httpd:print("HTTP 服务启动在端口", self.port)httpd.serve_forever()

/lib/WebSocketServer.py

python">import tornado.web
import tornado.httpserver
import tornado.ioloop
import tornado.websocketclass WebSocketHandler(tornado.websocket.WebSocketHandler):def open(self):print('WebSocket opened')def on_message(self, message):print('WebSocket message received {}'.format(message))self.write_message(message)def on_close(self):print('WebSocket closed')def check_origin(self, origin):return Trueclass WebSocketServer:def __init__(self, port):self.port = portdef start(self):application = tornado.web.Application([(r'/websocket', WebSocketHandler)])http_server = tornado.httpserver.HTTPServer(application)http_server.listen(self.port)tornado.ioloop.IOLoop.instance().start()

最外层新增Main.py

python"># 启动三个线程
# 1. PLC读取模块
# 2. 执行工艺试验模块
# 3. WebSocket通讯模块import threading
import timefrom lib.PlcReader import PlcReader
from lib.ProcessTester import ProcessTester
from lib.WebSocketServer import WebSocketServerplcReader = PlcReader("PlcReader")
processTester = ProcessTester(8080)
wsServer = WebSocketServer(9001)if __name__ == "__main__":print("启动程序")# 创建线程对象thread1 = threading.Thread(target=plcReader.run)thread2 = threading.Thread(target=processTester.start)thread3 = threading.Thread(target=wsServer.start)# 启动线程thread1.start()thread2.start()thread3.start()time.sleep(10)plcReader.refresh_config()print("aaa")

编辑完了之后,启动Main.py


http://www.ppmy.cn/embedded/128636.html

相关文章

在 Vue 项目中引入字体文件的详细指南

在 Vue 项目中引入自定义字体文件,可以通过多种方式实现。这取决于你的项目结构、构建工具以及字体文件的来源。本文将详细介绍如何通过不同方法引入本地字体文件以及从外部引入字体。 1. 引入本地字体文件 在项目中引入本地字体文件,通常需要通过 CSS…

【Vue】项目部署本地部署和服务器部署

本地部署 在本地部署一个 Vue 项目的 dist 目录,可以通过几种不同的方法来实现。以下是一些常见的方法: 1. 使用简单的 HTTP 服务器 方法 1:使用 http-server http-server 是一个简单的、零配置的命令行 HTTP 服务器。你可以使用它快速地…

【vue】⾃定义指令+插槽+商品列表案例

代码获取 07-⾃定义指令插槽商品列表案例 ⼀、⾃定义指令 1. 基本使⽤ 1.1 指令介绍 内置指令:v-model、v-for、v-bind、v-on… 这都是Vue给咱们内置的⼀些指令,可以直接使⽤ ⾃定义指令:同时Vue也⽀持让开发者,⾃⼰注册⼀些…

3 机器学习之假设空间

归纳(induction)与演绎(deduction)是科学推理的两大基本手段。前者是从特殊到一般的“泛化”(generalization)过程,即从具体的事实归结出一般性规律;后者则是从一般到特殊的“特化”(specialization)过程,即从基础原理推演出具体状况。例如&a…

Windows--使用node.js的免安装版本

原文网址:Windows--使用node.js的免安装版本_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Windows下如何使用node.js的免安装版本。 下载 1.访问官网 https://nodejs.org/en 记住这个版本号,这个是长期支持的版本。 2.找到压缩包 点击其他下载&#…

Java 时间格式转换详解

在 Java 开发中,时间和日期的处理是非常常见的需求。无论是用户输入的时间数据,还是系统生成的时间戳,我们经常需要对其进行格式化或解析。本文将详细介绍如何在 Java 中进行时间格式的转换,并分别介绍两种主要的方法:…

NCCL报错

1、报错信息: raise RuntimeError("Distributed package doesnt have NCCL " "built in") RuntimeError: Distributed package doesnt have NCCL built in 2、报错原因: windows系统不支持nccl,采用gloo; …

上门服务系统|上门服务小程序|上门服务系统成品

随着互联网的不断发展,上门服务小程序正逐渐成为人们生活中的必需品。这类小程序主要为用户提供诸如家政服务、维修服务、美容服务等各种上门服务。上门服务小程序的页面功能通常包括服务分类、预约服务、支付方式、评价功能等。用户可以通过简单的点击选择所需的服…