Python 3.4及更高版本中内置的asyncio模块可用于在单个线程中编写异步代码。此库支持使用can.Notifier类在事件循环中异步接收消息。
每个CAN总线仍将有一个线程,但用户应用程序将完全在事件循环中执行,从而实现更简单的并发性,而无需担心线程问题。但是,具有有效文件描述符的接口将在没有线程的情况下得到本机支持。
如果您更喜欢编写基于协程的代码而不是使用回调,也可以使用can.AsyncBufferedReader侦听器。
Example
下面是一个同时使用回调和基于协同程序的代码的示例:
#!/usr/bin/env python"""
This example demonstrates how to use async IO with python-can.
"""import asyncio
from typing import Listimport can
from can.notifier import MessageRecipientdef