hardbyte / hardbyte/python-can

Timeout in Notifier does not work as expected

Ouverte
#1,932 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
bug
Langage dominant
Python
Étoiles
1.6k
Forks
697
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

### 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.

Guide de contribution

Ouvrir le guide de contribution

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.