如何学习如何实现自定义Python异步事件循环?

2024-05-10 08:55:12 发布

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

我正在研究实现一个新的事件循环,以基于现有的运行循环实现插入到asyncio中,比如Cocoa的NSRunLoop和Qt的QEventLoop。但是很难从一个地方开始。在

文档中说,该系统设计为可插拔的,但没有确切地说明如何做到这一点。我应该从AbstractEventLoop开始,还是BaseEventLoop?什么方法做什么,我需要提供什么组件?我发现唯一有用的替代实现是uvloop,但是我发现它很难理解,因为它严重依赖于Cython和libuv,而这两个我并不熟悉。在

关于事件循环实现是如何完成的,以及如何定制一个,是否有一些总结?或者是一个不那么复杂的实现,我可以更快地思考?谢谢你的指点。在


Tags: 方法文档asyncio插拔uvloop系统地方事件
1条回答
网友
1楼 · 发布于 2024-05-10 08:55:12

documentation表示从AbstractEventLoop继承。在

对于剩下的问题,我发现文档不是很清楚,但是asyncio中具体事件循环的source code很有帮助。我写了一份 ^从AbstractEventLoop继承的{a3}创建事件驱动模拟器。在

我最想听到的是

  • 实现create_task。最终用户使用asyncio.ensure_future(coro())来调度协同程序,但这只是调用循环的create_task方法。不需要比 def create_task(self, coro): return asyncio.Task(coro, loop=self)

  • 实现call_sooncall_at和{}。它们由最终用户调用以调度纯回调函数。当最终用户计划协同程序时,异步/等待系统也会自动调用它们。

  • 如果常规回调引发异常,它将转到循环的call_exception_handler方法。如果一个协同程序引发了一个异常,那么这个异常存在于某个异步的never-never-land中,您必须catch it there

  • 查找source code for ^{}以查看应该重写的所有其他方法。另外:一些有帮助的评论。

相关问题 更多 >