为什么要在 aiohttp 中使用显式循环参数?

Why use explicit loop parameter with aiohttp?

aiohttp 库的 documentation 声明:

loop – event loop used for processing HTTP requests. If param is None, asyncio.get_event_loop() is used for getting default event loop, but we strongly recommend to use explicit loops everywhere. (optional)

可以将 loop 传递给 ClientSession 对象,提供 "module-level" 函数等

我是整个异步编程概念的新手,你能给我解释一下吗为什么 建议明确提供要使用的循环,而不是让 objects/functions 只使用默认值?

想到的一个用途是通过能够提供我自己的循环模拟使测试更容易,是否有性能原因?

原因是可读性而不是性能。

明确指定循环将使开发人员更容易查看循环实例的来源,并且如果需要将自定义循环注入程序,则可能更容易更改循环。

另一个流行的选择是 从不 指定循环参数,因此假设总是调用 asyncio.get_event_loop() 来获取循环实例。

(可以使用多个循环 - 例如在不同的线程中,但这不是常见的用例)