寻找关于如何将python水泥框架(http://builtoncement.com/)与asyncio(https://docs.python.org/3.4/library/asyncio.html)结合起来的一些指示。
我有一个基于asyncio的事件引擎启动并运行,我对进度和简单性非常满意。体面的表现。
现在我需要添加更复杂的处理程序,钩子和插件,浏览我发现的各种选项,水泥似乎是最受欢迎的,并且维护得很好。
我喜欢它处理日志记录,配置,参数,输出和插件的事实。
但是我找不到将asyncio与水泥框架一起使用的单一示例。
无论是否有可能,建议甚至替代水泥(与asyncio配合使用)都是非常受欢迎的。
谢谢!
答案 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