将Python Cement与asyncio结合使用

时间:2015-02-19 07:57:26

标签: python python-asyncio

寻找关于如何将python水泥框架(http://builtoncement.com/)与asyncio(https://docs.python.org/3.4/library/asyncio.html)结合起来的一些指示。

我有一个基于asyncio的事件引擎启动并运行,我对进度和简单性非常满意。体面的表现。

现在我需要添加更复杂的处理程序,钩子和插件,浏览我发现的各种选项,水泥似乎是最受欢迎的,并且维护得很好。

我喜欢它处理日志记录,配置,参数,输出和插件的事实。

但是我找不到将asyncio与水泥框架一起使用的单一示例。

无论是否有可能,建议甚至替代水泥(与asyncio配合使用)都是非常受欢迎的。

谢谢!

1 个答案:

答案 0 :(得分:1)

对于大多数零件而言,水泥与asyncio的整合非常容易。我找到的最好方法是使用您自己的实例扩展CementApp,并利用setup()获取循环并在需要时注册其他线程池。

注册_post_run钩子允许你执行init生成器的run_until_complete

注册_pre_close挂钩时,

允许您完成所有挂起的asyncio任务。

_init()和_finish()协程执行其余操作,主app逻辑归结为:

with myApp('myAppName') as app:
    app.run()
    app.log.info('Starting MyApp')

    try:
        app.run_forever()
    except (KeyboardInterrupt, SystemExit, CaughtSignal):
        app.log.info('Shutting down MyApp')

        app.close()

您可以在此处找到一个有效的示例:https://github.com/fxstein/SentientHome/blob/master/engine/event.engine.py