hardbyte / hardbyte/python-can

Async variant of BusABC?

オープン
#1,137 コメント 5 件 リアクション 0 件 担当者 0 名 GitHub で見る
api docs
主要言語
Python
スター
1.6k
フォーク
697
PR マージ指標
30日以内にマージされた PR はありません

説明

I am using the asyncio support in `Notifier` which works well on reception of messages. However there is no async variant of `BusABC.send()`. It has a timeout which by default is set to `None` that may block forever according to spec. Not all interfaces seems to be using the timeout parameter and I haven't had any problem using it as-is from async tasks. But it _is_ a potential block which may halt the async event loop if called from an async task. There are other functions in the `BusABC` API that has similar timeouts, like `recv()`.

I guess the first question would be if an async variant of `BusABC.send()` is really needed or not. If the timeout is for all practical purposes not used and sends are immediate, then IMHO there is nothing wrong with this blocking call.

What would be a good approach for async? Make a new `AsyncBus` as wrapper for `BusABC` in the same manner as `ThreadSafeBus` is? I believe due to the nature of async tasks, the `send()` function would need to put the message on a queue and await a signal. A separate (non async) tx thread would be responsible for sending the message using the regular `send()` including traditional timeouts and then signal back to the sleeping async task.

コントリビューションガイド

コントリビューションガイドを開く

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。