如何解决使用flask socketio、具有多个多进程的eventlet的正确方法
我想知道我是否以正确的方式使用flask socketio、具有多个多进程的eventlet。
我有多个进程来使用 gstreamer 处理相机流,每个进程将帧和元数据写入 redis。
我的主程序使用 socketio 来处理这个过程。 (开始,停止) 并从 redis 获取数据,然后通过套接字将其发送到网络客户端。
下面的代码非常简化,但显示了我所做的。 通常代码有效,但我想确定我是否以正确的方式做。 如果需要更多信息,请告诉我。
非常感谢
app = Flask(__name__)
socket_io = SocketIO(app,cors_allowed_origins="*",async_mode='eventlet')
class DeviceProcess(mp.Process):
def __init__(self,stop_event=None):
super().__init__()
self.stop_event = stop_event
def run(self):
"""
Worker
"""
while self.stop_event.is_set() == False:
#do gstreamer stuff and store data to redis
class DeviceManager(object):
def __init__(self):
"""
Handles device proc's
"""
self.device_procs = []
self.pill2kill = multiprocessing.Event()
def start(self):
"""
Start all device procs
"""
self.device_procs = []
for device in self.recv_config.streams:
s = DeviceProcess(
stop_event=self.pill2kill
)
s.start()
self.device_procs.append(s)
def stop(self):
"""
Stop all device proc's
"""
self.pill2kill.set()
@socket_io.on('stream_details')
def stream_details(data):
while True:
"""
Getting data from redis and emit
"""
emit('data',{<redis_data>})
# Stream with 25-FPS
socket_io.sleep(1 / 25)
@socket_io.on('stop_devices')
def stop_devices():
"""
Stop all devices procs via socket-oi
"""
app.dm.stop_procs()
emit('data',{'action': 'done'})
@socket_io.on('start_devices')
def start_devices():
"""
Start all devices procs via socket-oi
"""
app.dm.pill2kill.clear()
app.dm.start()
emit('data',{'action': 'done'})
if __name__ == '__main__':
app.dm = Devicemanger()
app.dm.start()
socket_io.run(app)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。