python中websockets与主线程传递参数
目录
一、子线程创建websockets服务端接收客户端数据
二、主线程内启动子线程接收并处理数据
一、子线程创建websockets服务端接收客户端数据并存入队列
发送的消息客户端与服务端统一,多种消息加入判断的标签
服务端:web_server.py
import asyncio
import json
import base64
import queue
import threading
import time
import cv2
import moment
import numpy as np
import requests
import websocketsclass WebServer:def __init__(self, host, port):self.host = hostself.port = portself.msg_queue = queue.Queue()self.clients = []self.flag = Trueasync def echo(self, websocket, path):client_ip, client_port = websocket.remote_addressself.clients.append(websocket)while True:try:# 在这里处理收到的消息# async for recv_text in websocket:recv_text = await websocket.recv()with open("aa.txt","w") as f:f.write(recv_text)data = json.loads(recv_text)#if type(data) is not dict: # 判断数据# continueself.msg_queue.put(res)except websockets.ConnectionClosed:print("ConnectionClosed...", websocket.remote_address) # 链接断开self.clients.remove(websocket)breakexcept websockets.InvalidState:print("InvalidState...", websocket.remote_address) # 无效状态self.clients.remove(websocket)breakexcept Exception as err:print("ws:", err)passdef connect(self):asyncio.set_event_loop(asyncio.new_event_loop())start_server = websockets.serve(self.echo, self.host, self.port)asyncio.get_event_loop().run_until_complete(start_server)asyncio.get_event_loop().run_forever()print("连接成功!")def run(self):t = threading.Thread(target=self.connect)t.start()print("已启动!")
二、主线程内启动子线程接收并处理数据
收到消息后根据情况处理消息
主线程调用服务端:main.py
from web_server import WebServerclass MainThread:def __init__(self):self.ws = WebServer("192.168.6.28", 8000)self.ws.run()def run(self):while True:try:data = self.ws.msg_queue.get()# flag = data.get("flag") # 内容标签 判断是否是自己想要的内容# if not flag:# continuetry:# 处理数据print(data)passexcept Exception as e:print("报错:", e)except Exception as err:print("报错:", err)passif __name__ == '__main__':M = MainThread()M.run()
客户端:web_client.py
客户端连接服务端,并发送消息
import jsonimport websocketclass WebClient:def __init__(self, host, port):self.host = hostself.port = portself.conn = Noneself.flag = Falsedef connect(self):try:url = f"ws://{self.host}:{self.port}"self.conn = websocket.create_connection(url)self.flag = Trueexcept Exception as err:self.flag = Falsedef close(self):self.conn.close()def recv(self):data = self.conn.recv(1024)print(data)def send(self, data):self.conn.send(data)if __name__ == '__main__':host = "192.168.6.28"# host = "127.0.0.1"port = 8000ws = WebClient(host, port)if not ws.flag:ws.connect()with open("bb.txt") as f:data = f.read()ws.send(data)
相关文章:
python中websockets与主线程传递参数
目录 一、子线程创建websockets服务端接收客户端数据 二、主线程内启动子线程接收并处理数据 一、子线程创建websockets服务端接收客户端数据并存入队列 发送的消息客户端与服务端统一,多种消息加入判断的标签 服务端:web_server.py import asynci…...
js谐音梗创意小游戏《望子成龙》
🌻 前言 龙年到来,祥瑞满天。愿您如龙般矫健,事业腾飞;如龙鳞闪耀,生活美满。祝您龙年大吉,万事如意! 龙年伊始,我给各位设计了一款原创的小游戏,话不多说,直…...
第十篇:node处理404和服务器错误
🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录</...
左右互博。
链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 讨厌鬼在和小甜妹在玩石头游戏。 游戏一开始有 nnn 堆石子,第 iii 堆石子,有 aia_iai 个石子。两人轮流进行游戏。 轮到某个人时,这个人先选数量为 x(x&…...
android通过广播打印ram使用信息
在内存非常吃紧的情况下,android设备会开始kill部分非系统进程甚至系统进程来保证基本的系统运行。在这种情况下如何获取设备过去某段时间的ram使用情况至关重要。 通过开发者模式中的“内存”可以完美得知设备内存使用信息。 我们可以通过此途径,设计一…...
内存管理——线性内存,进程空间
低2G为进程空间 开始地址结束地址大小属性00xFFFFF1M保留0x1000000x102FFF栈不固定位置、大小0x1030000x143FFF堆不固定位置、大小0x400000主程序文件不固定位置、大小加载dll不固定位置、大小0x7ffdd000TIB位置,大小编译时固定0x7FFFE000系统与用户共享数据块位置…...
入门Python必读的流程控制语句
流程控制 if-else 语法: if 条件:语句else:语句 例子: a1 #使用方式一 if a>1:print(大于1) else:print(小于等于1) #使用方式二 print(大于1) if a>1 else print(小于等于1) 输出: >>小于等于1 >>小于等于1 if-elif-else 语法: if 条件:语句elif 条件:…...
day05-进程通信
1> 将互斥机制的代码实现重新敲一遍 代码: #include<myhead.h>int num520;//临界资源//1.创建互斥锁 pthread_mutex_t fastmutex;//定义任务函数 void *task1(void *arg){printf("1111111\n");//3.临界区上面获取锁资源(上锁&#…...
如何将OpenAI Sora生成的普通AI视频转化为Vision Pro的空间视频,沉浸式体验
【基于AI的Vision Pro空间视频】工作流:这个工作流程用于将2D视频转换为适用于 Vision Pro的Spatial视频: 1、使用Deep3D将2D视频转换为3D SBS: 使用Deep3D工具将2D视频转换为3D SBS格式: 转换例子:Prediction– lucataco/deep3d – Replicatehttps://replicate.com/…...
爬虫基础(下)
requests模块可以用来获取网络数据; 那么对于爬虫来说,要获取下图网页中的内容,就需要网页的URL。 复制链接方法是,打开网页,点击链接框,右键选择复制。 requests.get()函数可用于模拟浏览器请求网页的过…...
【八股文面试】Java基础常见面试题总结(上)
Java基础常见面试题总结(上) Java有哪些特性 简单易学;面向对象(封装,继承,多态);平台无关性( Java 虚拟机实现平台无关性);支持多线程( C 语言没有内置的多…...
c++:蓝桥杯的基础算法2(构造,模拟)+练习巩固
目录 构造 构造的基础概念: 模拟 练习1:扫雷 练习2:灌溉 练习3:回文日期 构造 构造的基础概念: 构造算法是一种用于解决特定问题的算法设计方法。在C语言中,构造算法通常涉及到创建一个函数或类来实…...
C++ 和 C#的区别
如是我闻: C#(发音为 “C sharp”)和C是两种流行的编程语言,它们各有特点和用途。下面是这两种语言的一些主要区别: 设计理念和用途: C: 是一种多范式编程语言,支持过程化编程、面向对象编程、泛型编程等。…...
2.14日学习打卡----初学Zookeeper(一)
2.14日学习打卡 目录: 2.14日学习打卡Zookeeper概念一. 集中式到分布式单机架构集群架构什么是分布式三者区别 二. CAP定理分区容错性一致性可用性一致性和可用性的矛盾一致性和可用性如何选择 三. 什么是Zookeeper分布式架构Zookeeper从何而来Zookeeper介绍 四. 应用场景数据发…...
SkyWalking之APM无侵入可观测原理分析
一、 简介(为什么需要用到可观测能力) 随着微服务的开发模式的兴起,早期的单体架构系统已拆分为很多的子系统,各个子系统封装为微服务,各服务间通过HTTP协议RESET API或者RPC协议进行调用。 在单体服务或者微服务较少的…...
Missing artifact org.yaml:snakeyaml:jar:1.29
关于导入本地maven项目pom.xml出现missing artifact org....报错处理 环境变量配置maven,eclipse中配置maven,重启eclipse。...
三opencv源码解压及环境变量配置
1.双击opencv-3.4.6-vc14-vc15.exe 2.选择解压的路径,点击【extract】 3.设计环境变量...
vue实时监控视频播放的进度,并在播放80%位置触发相应操作
video标签:播放时触发canplay事件 <video:src"filePath"controlsv-if"filePrefix mp4 || filePrefix avi"canplay"getVideoDur()"id"myVideo"class"preview"></video>canplay触发的方法ÿ…...
HTML+CSS滚动条样式如何单独给firefox设置 scrollbar-width: none;,而不影响其他浏览器
要在Firefox中单独设置滚动条样式,你可以使用@-moz-document规则。这个规则允许你为特定的浏览器或浏览器引擎应用样式。 下面是一个例子,演示如何在Firefox中隐藏滚动条: @-moz-document url-prefix() {/* 在这里添加只对Firefox生效的样式 */body {scrollbar-wi…...
《Go 简易速速上手小册》第2章:控制结构与函数(2024 最新版)
文章目录 2.1 条件语句:决策的艺术2.1.1 基础知识讲解2.1.2 重点案例:用户角色权限判断实现用户角色权限判断扩展功能实现代码功能扩展:添加或删除用户2.1.3 拓展案例 1:成绩等级判断实现成绩等级判断功能实现代码扩展功能:详细反馈...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
