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