何时使用多个事件循环?

2024-04-29 15:36:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个基于python3.5+异步框架(apistar、sanic等)构建的web应用程序。该应用程序进行各种IO调用-对数据库、Redis等的调用也是异步的。在

Some docs建议使用其他事件循环:

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)

据我所知,await语句允许事件循环在它到达IO时进行上下文切换,因此额外的事件循环似乎完全没有必要。在

使用附加事件循环的好处是什么?何时应该使用附加循环?在


Tags: ioimportredis框架loopwebasyncio数据库
2条回答

您应该一次只使用一个IO循环,并且每个线程一次只允许一个IO循环。threading和{}对并发性使用了不同的对比方法。运行多个循环(在多个线程中)被认为是不好的做法,应该避免。在

上面的文档不建议使用“附加”循环。它展示了如何显式地指定一个自定义循环,而不将其注册为默认循环。在

在运行测试时,应该逐个使用多个事件循环,这样每个测试用例都是针对其自己的事件循环运行的。在

根据底层框架的要求,您可能需要同时使用多个循环。在示例中,pyzmq和{}需要它们自己的事件循环。在

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

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

相关问题 更多 >