何时使用多个事件循环?

kni*_*ite 10 python event-loop python-3.x async-await python-asyncio

我有一个基于Python 3.5+异步框架(apistar,sanic等)构建的Web应用程序.该应用程序进行各种IO调用 - 数据库,Redis等 - 也是异步的.

有些文档建议使用其他事件循环:

import asyncio
import peewee
from peewee_async import Manager, PostgresqlDatabase

loop = asyncio.new_event_loop() # Note: custom loop!
database = PostgresqlDatabase('test')
objects = Manager(database, loop=loop)
Run Code Online (Sandbox Code Playgroud)

我的理解是await语句允许事件循环在上传IO时进行上下文切换,因此额外的事件循环似乎完全没必要.

使用额外的事件循环有什么好处,何时应该使用其他循环?

Udi*_*Udi 5

一次应该只使用一个 IO 循环,并且每个线程一次只允许使用一个 IO 循环。 threadingasyncio使用不同且对比鲜明的并发方法。运行多个循环(在多个线程中)被认为是一种不好的做法,应该避免。

上面的文档不建议使用“附加”循环。它展示了如何显式指定自定义循环而不(或之前)将其注册为默认循环。


Ken*_*tzo 5

当您运行测试时,您应该一个接一个地使用多个事件循环,因此每个测试用例都针对其自己的事件循环运行。

根据底层框架的要求,您可能必须同时使用多个循环。在示例中pyzmqquamash需要自己的事件循环。

如果您需要更好地控制任务执行,您可能希望同时使用多个循环。例如,当您想要明确地对任务进行分组并决定应该执行哪个组时。

请记住,当前的实现只允许每个线程一次运行一个循环。