我正在考虑实现一个新的事件循环来插入asyncio基于现有的运行循环实现,如Cocoa NSRunLoop和Qt QEventLoop.但是很难找个地方开始.
文档说该系统设计为可插拔的,但它没有确切说明如何做到这一点.我应该开始AbstractEventLoop,还是BaseEventLoop?什么方法做什么,我需要提供哪些组件?我发现唯一有用的替代实现是uvloop,但发现很难理解,因为它很大程度上依赖于我不熟悉的Cython和libuv.
是否有关于如何完成事件循环实现的文章,以及如何制作自定义循环?或者参与程度较低,我可以更快地解决问题?谢谢你的任何指示.
该文件说,要继承AbstractEventLoop.
对于你的其余问题,我没有发现文档非常清楚,但具体事件循环的源代码asyncio是有帮助的.我写了一个
非常简单的继承的例子AbstractEventLoop来创建一个事件驱动的模拟器.
我喜欢被告知的主要事情是
实施create_task.最终用户使用调度协程asyncio.ensure_future(coro()),但这只是调用循环的create_task方法.它不需要任何东西
def create_task(self, coro): return asyncio.Task(coro, loop=self).
实施call_soon,call_at和call_later.最终用户调用这些来调度普通回调函数.每当最终用户调度协程时,它们也会由async/await系统自动调用.
如果常规回调引发异常,则转到循环call_exception_handler方法.如果一个协程引发异常,那么异常会存在于一些异步永不落地的情况下,你必须在那里捕获它.
查找源代码AbstractEventLoop以查看您应该覆盖的所有其他方法.奖金:有些有用的评论.
| 归档时间: |
|
| 查看次数: |
1184 次 |
| 最近记录: |