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时进行上下文切换,因此额外的事件循环似乎完全没必要.
使用额外的事件循环有什么好处,何时应该使用其他循环?
一次应该只使用一个 IO 循环,并且每个线程一次只允许使用一个 IO 循环。 threading并asyncio使用不同且对比鲜明的并发方法。运行多个循环(在多个线程中)被认为是一种不好的做法,应该避免。
上面的文档不建议使用“附加”循环。它展示了如何显式指定自定义循环而不(或之前)将其注册为默认循环。
当您运行测试时,您应该一个接一个地使用多个事件循环,因此每个测试用例都针对其自己的事件循环运行。
根据底层框架的要求,您可能必须同时使用多个循环。在示例中pyzmq并quamash需要自己的事件循环。
如果您需要更好地控制任务执行,您可能希望同时使用多个循环。例如,当您想要明确地对任务进行分组并决定应该执行哪个组时。
请记住,当前的实现只允许每个线程一次运行一个循环。
| 归档时间: |
|
| 查看次数: |
2240 次 |
| 最近记录: |