首页 > 解决方案 > 使用 for 在 python 中创建多个 Rx 主题

问题描述

我正在尝试为每个in创建一个Subject和 2 。我通过将对象保存在一个类中并为每个, inside存储一个类实例来防止对象被删除。这里的问题是:我最终得到了 3 个 rx 中继器,它们都为最后一个工作,而不是每个工作。有人能找出问题所在吗?ObservablescamcamsCamCamcamcam_holdercamcams

cam_holder = {}

class Cam():
    cam = None
    watchdog = None
    buffer_signal = None
    stream = None
    repeater = None

for cam in cams:
    unique_id = str(cam.ip) + ':' + str(cam.onvif)
    cam_holder[unique_id] = Cam()
    c = cam_holder[unique_id]
    c.cam = cam
    c.cam.log('starting watchdog')

    c.watchdog = rx.subject.Subject()

    c.buffer_signal = rx.create(lambda observable, _: c.watchdog.subscribe(observable)).pipe(
        ops.filter(lambda x: x==Camera.COMPLETE_BUFFER)
    )

    c.stream = rx.create(lambda observable, _: c.watchdog.subscribe(observable)).pipe(
        ops.buffer_when(lambda: c.buffer_signal)
    )

    c.stream.subscribe(
        on_next = lambda i: process_camera_condition(c.cam,i),
        on_error = lambda e: c.cam.log(e),
        on_completed = lambda: None,
    )

    c.buffer_signal.subscribe(
        on_next = lambda i: None,
        on_error = lambda e: c.cam.log(e),
        on_completed = lambda: None,
    )

    c.repeater = rx.interval(QUERY_INTERVAL).pipe(
        ops.do_action(lambda x: c.cam.watchdog(c.watchdog,None))
    )

    c.repeater.subscribe(
        on_next = lambda i: None,
        on_error = lambda e: c.cam.log(e),
        on_completed = lambda: None,
    )

标签: pythonpython-3.xreactive-programming

解决方案


推荐阅读