首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python多线程(四)

Python多线程(四)

作者头像
企鹅号小编
发布于 2018-01-25 08:58:50
发布于 2018-01-25 08:58:50
7990
举报
文章被收录于专栏:编程编程

如何使用线程本地数据

实际案例:

实现了一个web视频监控服务器,服务端采集摄像头数据,客户端使用浏览器通过http请求接收数据,服务器使用推送的方式(multipart/x-mixed-replace)一直使用一个tcp连接向客户端传递数据,这种方式将持续占用一个线程,导致单线程服务器无法处理多客户端请求

改写程序,在每个吕处理一个客户端请求,支持多客户端访问

importos, cv2, time,struct, threading

fromhttp.serverimportHTTPServer,BaseHTTPRequestHandler

fromsocketserverimportTCPServer,ThreadingTCPServer

fromthreadingimportThread, RLock

fromselectimportselect

classJpegStreamer(Thread):#负责采集数据,独立线程,相当于数据源

def__init__(self,camera):

Thread.__init__(self)

self.cap =cv2.VideoCapture(camera)

self.lock = RLock()

self.pipes = {}

defregister(self):

pr, pw = os.pipe()

self.pipes[pr] = pw

returnpr

defunregister(self,pr):

os.close(pr)

os.close(pw)

defcapture(self):

cap =self.cap

whilecap.isOpened():

ret, frame = cap.read()

ifret:

#ret, data =cv2.imencode('.jpg', frame)

ret, data = cv2.imencode('.jpg', frame, (cv2.IMWRITE_JPEG_QUALITY,40))

yielddata.tostring()

defsend(self,frame):

n = struct.pack('l', len(frame))

iflen(self.pipes):

forpipeinpipes:

os.write(pipe, n)

os.write(pipe, frame)

defrun(self):

forframeinself.capture():

self.send(frame)

classJpegRetriever(object):#从streamer中获取数据

def__init__(self,streamer):

self.streamer =streamer

self.local =threading.local()

defretrieve(self):

whileTrue:

n = struct.unpack('l', ns)[]

yielddata

def__enter__(self):

ifhasattr(self.local,'pipe'):

raiseRuntimeError()

returnself.retrieve()

def__exit__(self,*args):

returnTrue

classHandler(BaseHTTPRequestHandler):#处理http请求

retriever =None

@staticmethod

defsetJpegRetriever(retriever):

Handler.retriever = retriever

defdo_GET(self):

ifself.retrieverisNone:

raiseRuntimeError('no retriver')

ifself.path !='/':

return

self.send_response(200)

self.send_header('Content-type','multipart/x-mixed-replace;boundary=abcde')

self.end_headers()

withself.retrieverasframes:

forframeinframes:

self.send_frame(frame)

defsend_frame(self,frame):

s ='--abcde\r\n'

s +='Content-Type:image/jpeg\r\n'

s +='Content-Length:%s\r\n\r\n'% len(frame)

if__name__ =='__main__':

streamer = JpegStreamer()

streamer.start()

retriever = JpegRetriever(streamer)

Handler.setJpegRetriever(retriever)

print('Startserver...')

httpd = ThreadingTCPServer(('',9000), Handler)

httpd.serve_forever()

本文来自企鹅号 - 胡博士小作坊媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - 胡博士小作坊媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python+Opencv读取高帧率USB摄像头问题
前几次使用Python+Opencv,对网络摄像头,USB摄像头进行数据采集,基本流程已经跑通,没什么大问题。最近项目中使用了一款120fps/s的USB摄像头,但是调试好代码运行后,问题来了。
虫无涯
2023/01/17
3.2K0
多线程读取IP摄像头(Python)
在深度学习时代(这么说也不为过)的今天,我们做各种视觉任务时候都会想到使用深度学习,但是大家也都知道深度学习的模型如果想要使用的话,设备必须得有,虽然各种各样的量化策略和剪枝策略大大加速了模型的推理能力,但是实时的话在低配电脑还是不可用! 但是实际中有些视觉任务不怎么依赖实时性,我们只需要保证1s处理一帧图片就可以了,或者几十秒处理一帧也可以。那么这种处理策略怎么处理呢?特别对于IP摄像头,它是以数据流的形式传输,因此当其帧率较高时,本地处理程序会处理不过来,导致卡帧(延时)和程序卡死!我们一起来看看吧!
深度学习与Python
2019/07/23
2.7K0
物联网下的数据传输,Python 就能搞定!
物联网是新一代信息技术的重要组成部分,也是"信息化"时代的重要发展阶段。顾名思义,物联网就是物物相连的互联网。这有两层意思:其一,物联网的核心和基础仍然是互联网,是在互联网基础上的延伸和扩展的网络;其二,其用户端延伸和扩展到了任何物品与物品之间,进行信息交换和通信,也就是物物相息。物联网通过智能感知、识别技术与普适计算等通信感知技术,广泛应用于网络的融合中,也因此被称为继计算机、互联网之后世界信息产业发展的第三次浪潮。而物联网最为核心的功能便是数据传输功能,利用互联网实现数据在任何可以接受数据的设备平台上达到传输效果,其中设备可以包括:本地PC、服务器、树莓派、手机、手环等等。
AI科技大本营
2021/02/05
1.7K0
「玩转树莓派」搭建智能家居远程监控系统
前几天,在食堂吃饭,本来每天中午的新闻三十分换成了视频监控。我们已经习惯了,前十分钟看着领导都很忙,中间十分钟中国人民都很幸福,后十分钟别的国家都生活在水深火热里,顺便跟同事谈谈国家大事。突然主角换成了我们自己,便毫无抬头的欲望。
小柒2012
2019/12/09
3.4K0
「玩转树莓派」搭建智能家居远程监控系统
搞定python多线程和多进程
线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。一个线程是一个execution context(执行上下文),即一个cpu执行时所需要的一串指令。
Dar_Alpha
2018/10/09
5970
OpenCV调用海康威视等摄像头(处理rtsp视频流)方法以及,出现内存溢出(error while decoding)或者高延迟问题解决[通俗易懂]
首先,你需要获得hikvision摄像头的密码以及用户名(不知道的可以去打客服电话进行咨询),这里不做介绍;
全栈程序员站长
2022/11/02
9.7K0
用Python操作Named pipe命
        在我以前做过的用于手游服务器的Python服务器框架里,我用了Python的multiprocessing库,多进程通信用了multiprocessing提供的最方便的queue,实际上就是一种匿名管道。要求管道两端的进程必须是父子进程或者兄弟进程。
py3study
2020/01/07
1.9K0
python多线程socket编程--多
Python中实现socket通信的服务端比较复杂,而客户端非常简单,所以客户端基本上都是用sockct模块实现,而服务 端用有很多模块可以使用,如下:
py3study
2020/01/10
1.4K0
python多线程socket编程--多
AIGC与AidLux互联应用—Aidlux端AIGC测评
本帖子源于AidLux面向众多开发者的AIGC训练营,目的在于实现使用stablediffusion生成图片传输到AidLux端实现目标检测。分享部分传输检测代码及其实现视频如下:
用户10559524
2023/06/03
2840
AIGC与AidLux互联应用—Aidlux端AIGC测评
基于OpenCV的网络实时视频流传输
很多小伙伴都不会在家里或者办公室安装网络摄像头或监视摄像头。但是有时,大家又希望能够随时随地观看视频直播。
小白学视觉
2020/11/13
4.5K0
基于OpenCV的网络实时视频流传输
一篇文章梳理清楚 Python 多线程与多进程
在学习Python的过程中,有接触到多线程编程相关的知识点,先前一直都没有彻底的搞明白。今天准备花一些时间,把里面的细节尽可能的梳理清楚。
吾非同
2021/12/13
1.2K0
一篇文章梳理清楚 Python 多线程与多进程
智能监控与行人安全—行人交通违法行为自动罚款系统的技术
随着人工智能技术的不断发展,智能监控系统在城市管理和安全领域扮演着愈发重要的角色。其中,行人交通违法行为的监测与处理成为了一项备受关注的技术挑战。本文将探讨如何利用人工智能技术构建智能监控下的行人交通违法行为自动罚款系统,并提供相应的代码实例。
一键难忘
2024/01/26
4380
【目标检测】YOLOv5推理加速实验:图片批量检测
上篇博文探究了一下多进程是否能够对YOLOv5模型推理起到加速作用,本篇主要来研究一下如果将图片批量送入网络中进行检测,是否能对网络的推理起到加速作用。
zstar
2023/04/12
2.7K0
python多线程多进程脚本
python 中一般用 threading 模块来实现多线程,一种实现多线程的脚本如下,最终的运行时间为 1s 多一点点,join 表示将子线程加入主线程,等待子线程都运行完才会继续往下执行。
棒棒鸡不棒
2022/09/02
9500
使用Python实现深度学习模型:智能宠物监控与管理
在现代家庭中,宠物已经成为许多家庭的重要成员。为了更好地照顾宠物,智能宠物监控与管理系统应运而生。本文将详细介绍如何使用Python实现一个智能宠物监控与管理系统,并结合深度学习模型来提升其功能。
Echo_Wish
2024/09/19
3081
使用Python实现深度学习模型:智能宠物监控与管理
opencv︱图片与视频的读入、显示、写出、放缩与基本绘图函数介绍
opencv中读入、显示、写出图片:cv2.imread(), cv2.imshow(), cv2.imwrite()
悟乙己
2019/05/26
5.9K0
视频逐帧读取并保存至指定文件夹(opencv之python描述)
frame = video.read()
用户4908836
2020/04/14
1.9K0
基于MTCNN和MobileFaceNet实现的人脸识别
本教程是教程是介绍如何使用Tensorflow实现的MTCNN和MobileFaceNet实现的人脸识别,并不介绍如何训练模型。关于如何训练MTCNN和MobileFaceNet,请阅读这两篇教程 MTCNN-Tensorflow 和 MobileFaceNet_TF ,这两个模型都是比较轻量的模型,所以就算这两个模型在CPU环境下也有比较好的预测速度,众所周知,笔者比较喜欢轻量级的模型,如何让我从准确率和预测速度上选择,我会更倾向于速度,因本人主要是研究深度学习在移动设备等嵌入式设备上的的部署。好了,下面就来介绍如何实现这两个模型实现三种人脸识别,使用路径进行人脸注册和人脸识别,使用摄像头实现人脸注册和人脸识别,通过HTTP实现人脸注册和人脸识别。
夜雨飘零
2020/07/19
2.8K1
Python的进程
Python实现多进程的方式主要有两种:一种方法是使用os模块中的fork方法; 另一种是使用multiprocessing模块。这两种方法的区别在于前者仅适用于Unix/Linux操作操作。对win是不支持的,而后者则是跨平台的实现方式。
龙哥
2018/10/22
6910
Python+Opencv解析一段视频并逐帧保存到本地
可以做到无视视频的长短,视频的帧率。多长就解析多长,多少帧率就解析多少帧率,视频解析完直接退出,避免影响内存或者Opencv窗口卡死
虫无涯
2023/01/17
7320
推荐阅读
相关推荐
Python+Opencv读取高帧率USB摄像头问题
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档