先看测试代码和现象:
通过断点追踪,发现这个异常是timer事件。
该函数是为了事件接收,为何不阻塞等待,目前是超时1s退出。
我本地尝试改成阻塞等待就正常了,但不知为何抛出空异常。
先看测试代码和现象:
通过断点追踪,发现这个异常是timer事件。
该函数是为了事件接收,为何不阻塞等待,目前是超时1s退出。
我本地尝试改成阻塞等待就正常了,但不知为何抛出空异常。
看网上的解释好像不需要timeout参数。
我直接把timeout=1去掉了,看起来像是正常了。希望群主帮忙释疑。
timeout相当于一个定时器,最多等待一秒,去除后就会无限等待,直到队列中可以取数为止,所以就没有empty报错了。代码前后的try...except...的作用就是接受报错,会先尝试try中的代码,如果出现错误就会去看except后面的错误类型,如果两者一致或者except后没有填写具体的错误类型,则执行except后的语句,在这里就是pass,也就是跳过。所以这里的逻辑是在一个死循环中,尝试取队列中的事件,如果没有则等待1秒,如果还是没有则进入下一次循环。这里其实目的是每隔1秒检查self.active是否为真,即程序是否还在运行,如果程序停止,则self.active会变成假,就不会再运行此函数。你改完后当程序使用stop退出后,这里仍然会堵塞住。
楼上正解
多谢