hardbyte / hardbyte/python-can

Timeout in Notifier does not work as expected

Abierto
#1,932 0 comentarios 0 reacciones 0 asignados Ver en GitHub
bug
Lenguaje dominante
Python
Estrellas
1.6k
Forks
697
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

### Describe the bug
I think, though being not sure, that the `timeout` in `Notifier` does not work as expected.
From the definition of `BusABC.recv(timeout)` in [here](https://github.com/hardbyte/python-can/blob/main/can/bus.py#L110) on timeout it returns `None` that is currently being discarded in `Notifier._rx_thread` as defined [here](https://github.com/hardbyte/python-can/blob/main/can/notifier.py#L123).

### To Reproduce
```python
import time
import can

class MyListener(can.Listener):
def on_message_received(self, msg: can.Message) -> None:
if msg is None:
print("Timeout occurred.")
else:
print(f'Message received: {msg}')

def main():
with can.Bus(interface="virtual", receive_own_messages=True) as bus:
print_listener = MyListener()
notifier = can.Notifier(bus, [print_listener], timeout=1.0)
time.sleep(2.0)
bus.send(can.Message(arbitration_id=1, is_extended_id=False))
notifier.stop()

if __name__ == "__main__":
main()
```

### Expected behaviour
I expect Listener to call "Timeout occurred." in the provided example.
Currently `on_message_received` is not called on timeout.

I would welcome discussion and help about how to realize timeout behaviour in Listener - Notifier architecture. I think there should be a way to let Listeners handle being starved.

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.