我正在研究实现一个新的事件循环,以基于现有的运行循环实现插入到asyncio
中,比如Cocoa的NSRunLoop
和Qt的QEventLoop
。但是很难从一个地方开始。在
文档中说,该系统设计为可插拔的,但没有确切地说明如何做到这一点。我应该从AbstractEventLoop
开始,还是BaseEventLoop
?什么方法做什么,我需要提供什么组件?我发现唯一有用的替代实现是uvloop,但是我发现它很难理解,因为它严重依赖于Cython和libuv,而这两个我并不熟悉。在
关于事件循环实现是如何完成的,以及如何定制一个,是否有一些总结?或者是一个不那么复杂的实现,我可以更快地思考?谢谢你的指点。在
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_soon
、call_at
和{如果常规回调引发异常,它将转到循环的
call_exception_handler
方法。如果一个协同程序引发了一个异常,那么这个异常存在于某个异步的never-never-land中,您必须catch it there。查找source code for ^{} 以查看应该重写的所有其他方法。另外:一些有帮助的评论。
相关问题 更多 >
编程相关推荐