擅长:python、mysql、java
<p>要使函数异步,您需要使用<code>async def</code>来定义它,并将其更改为对任何可能阻塞的对象使用其他异步函数-例如,您将使用<code>aiohttp</code>而不是<code>requests</code>,等等。这项工作的重点是,该函数随后可以由事件循环与其他此类函数一起执行。每当异步函数需要等待某件事情时,如<code>await</code>关键字所示,它将挂起到事件循环,并给其他函数一个执行的机会。事件循环将无缝地协调可能大量此类异步函数的并发执行。有关更多详细信息,请参见例如<a href="https://stackoverflow.com/q/49005651/1600898">this answer</a></p>
<p>如果您所依赖的关键阻塞函数没有异步实现,则可以使用<a href="https://docs.python.org/3/library/asyncio-eventloop.html#asyncio.loop.run_in_executor" rel="nofollow noreferrer">^{<cd5>}</a>(或者,从Python 3.9开始,<a href="https://docs.python.org/3/library/asyncio-task.html#asyncio.to_thread" rel="nofollow noreferrer">^{<cd6>}</a>)使其异步。但是,请注意,这些解决方案是“欺骗”的,因为它们在引擎盖下使用线程,因此它们不会提供通常由asyncio关联的好处,例如扩展到线程池中的线程数之外的能力,或者取消执行协程的能力</p>