在可能之前将 asyncio 库应用于书面库吗?

Is applying asyncio library to written library before possible?

https://github.com/jborean93/smbprotocol

我们在项目中使用了上面的库,但我们想通过使用线程池或 asyncio 库提供的异步编程来加速 API。我们想知道我们是否可以将此库与发生 I/O 绑定操作的操作一起使用。如果可以实现,能举个例子吗?

是的。 这个想法是 运行 执行器中的所有遗留阻塞 IO 调用 - asyncio 库提供 run_in_executor 调用,它会处理这个问题。

只是,因为它是 I/O 绑定的,所以提供一个自定义执行器而不是 asyncio 创建的默认执行器(当您将“None”作为执行器传递时):默认是保守的,因为要执行的任务可能是 CPU 绑定的 - 所以它的工作人员数量与可用的 CPU 核心成正比。对于 I/O 绑定任务,您可能会在平均网络 link 的 15 个工作人员左右获得良好的结果,如果您的带宽为 1GBpS 数量级,则更多。

用法再简单不过了:只需编写你的应用程序,在asyncio循环下将协程函数设为运行,然后调用遗留库 asyncio.create_task(asyncio.run_in_executor(executor, legacy_function, *args_to_legacy_function))