【发布时间】:2019-04-01 16:11:24
【问题描述】:
目前,asyncio Event Loop 支持对网络套接字、文件、子进程和信号进行非阻塞工作。对于其他操作,文档描述了executing code in thread or process pools,但这似乎效率低得多(线程与协程)。
有没有办法引入额外的低级非阻塞操作,例如包装 I/O 繁重的库调用?必须实现哪些原语?
【问题讨论】:
-
你能举一个你想介绍的低级调用的例子吗?底层调用本身是异步的吗?如果是这样,它是否提供通知机制,或者调用者是否希望轮询它以完成?
-
不,底层库调用被阻塞。我正在考虑引入非阻塞接口扩展,因此它与 asyncio 兼容。为了明确起见,我们将Windows Overlapped Serial port communication 视为非阻塞接口的示例。
-
如果底层库阻塞并且你想包装它(而不是重新实现它),那么线程可能是你唯一的选择。
-
我可以控制库代码,因此我可以使用非阻塞调用扩展接口。但我完全想念
asyncio期望的电话。
标签: python-asyncio nonblocking