AsaChiri / DDRecorder

📺Headless全自动B站直播录播、切片、上传一体工具
Apache License 2.0
442 stars 71 forks source link

fix: live status shadowing #58

Closed satouriko closed 2 years ago

satouriko commented 2 years ago

很尴尬就是,#46 其实并没有真正解决 #17,但是让问题显著变少了。以前会出来一大堆空目录,现在每次录播只会多出来一个。原因是我在初始化 BiliLiveRecorderBiliDanmuRecorder 的时候挂载了 MainRunnerself.bl 的状态(上次检查的时间),这样子进程和父进程检查的时间相差变小了。并不是像我想象的那样,子进程对 self 中状态的修改能直接反馈给父进程。https://stackoverflow.com/a/40873071

47 也没有解决 #17,但是思路应该是对的。问题是不能直接通过给派生类属性赋值操作基类的属性(见下面示例代码),这个 Pr 提供了修复。

class BaseClass:
    def __init__(self):
        self.__live_status = False

    @property
    def live_status(self) -> bool:
        return self.__live_status

    @live_status.setter
    def live_status(self, status: bool):
        self.__live_status = status

class SubClass(BaseClass):
    def __init__(self):
        super().__init__()

x = SubClass()
x.__live_status = True
# False
print(x.live_status)
x.live_status = True
# True
print(x.live_status)

然后实际上,在这个 Pr 之前, https://github.com/AsaChiri/DDRecorder/blob/1ca39f94ea46c3eed12bad730f38862d19c31764/BiliLive.py#L16 甚至是没有用的,因为它并没有“check_live_status”,只是更新了“room_info”,“room_info”在第一次访问“live_status”属性之前又没有用到。 https://github.com/AsaChiri/DDRecorder/blob/1ca39f94ea46c3eed12bad730f38862d19c31764/BaseLive.py#L59-L67

satouriko commented 2 years ago

经过了测试,效果很好!