寻找有关如何将 python cement 框架 ( http://builtoncement.com/ ) 与 asyncio ( https://docs.python.org/3.4/library/asyncio.html ) 相结合的一些建议。
我有一个基于 asyncio 的事件引擎启动并运行,我对它的进步和简单性感到非常满意。表现也不错。
现在我需要添加更复杂的处理程序、 Hook 和插件并浏览我发现的各种选项,cement 似乎是我的最爱并且维护得很好。
我喜欢它处理日志记录、配置、参数、输出和插件这一事实。
但是我找不到将 asyncio 与 cement 框架一起使用的示例。
无论是否可能、建议甚至是 cement 的替代品(与 asyncio 配合良好)的任何观点都将非常受欢迎。
谢谢!
最佳答案
事实证明,对于大多数部分来说,将 cement 与 asyncio 集成起来非常容易。我发现的最佳方法是使用您自己的实例扩展 CementApp 并利用 setup() 获取循环并在需要时注册额外的线程池。
注册一个 _post_run 钩子(Hook)允许你执行 init generator 的 run_until_complete
在注册 _pre_close Hook 时,您可以完成所有挂起的异步任务。
一个 _init() 和 _finish() 协程完成剩下的工作,主要的应用程序逻辑归结为:
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
关于python - 将 Python Cement 与 asyncio 相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28601144/