问题描述
我想知道我是否以正确的方式使用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 (将#修改为@)