微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用flask socketio、具有多个多进程的eventlet的正确方法

如何解决使用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 举报,一经查实,本站将立刻删除。