プログラムをTornadoからAsyncioに変換しようとしていますが、最初のステップは実際のasyncioイベントループをdescribed hereとして使用することです。Python Asyncioを使用してGPIO割り込みを待ちます
このアプリケーションは組み込みLinuxマシン上で動作し、私はsysfs/gpio subsystemを通してGPIOを使用しています。これらのGPIOの中には、割り込みを待っているものがあります。私が直接行って、トルネードIOLoopにこれを統合することができました:
コードピースで# Register with the queue
self.io_loop.add_handler(
self.gpio._value_file, self._handle_interrupt, self.io_loop._EPOLLPRI | self.io_loop.ERROR
)
、_value_file
はGPIOから読み取ることができるファイルへのファイルハンドルです。 EPOLLPRIイベントは、そのGPIO上の割り込みが使用可能なときはいつでも起動されます。トルネードでは、これは非常にうまくいく。割り込みが来た直後に_handle_interrupt
関数を呼び出します。
私の問題は、これをネイティブasyncioイベントループに変換できなかったことです。 the documentation for watching file descriptors私は読者とライターを追加する機能しか見つけられませんが、ファイル記述子の汎用イベントマスクを監視する機能はありません。それはしかし、C.に入るので、私はこれがそうであるようにそれはそうasyncio IOLoopにトルネードIOLoopからの呼び出しを翻訳するためにトルネード層を見て、コードに飛び込むことができません。
def add_handler(self, fd, handler, events):
fd, fileobj = self.split_fd(fd)
if fd in self.handlers:
raise ValueError("fd %s added twice" % fd)
self.handlers[fd] = (fileobj, stack_context.wrap(handler))
if events & IOLoop.READ:
self.asyncio_loop.add_reader(
fd, self._handle_events, fd, IOLoop.READ)
self.readers.add(fd)
if events & IOLoop.WRITE:
self.asyncio_loop.add_writer(
fd, self._handle_events, fd, IOLoop.WRITE)
self.writers.add(fd)
読み取り専用とWRITEフラグは変換され、他のすべてのフラグは無視されます。
誰かが、現在、asyncioを使用して、READおよびWRITEイベント以外のファイルディスクリプタのイベントを監視できないことを確認できますか?あるいは私は何か間違っているのですか?実際に方法がありますか?