python - 将 Python Cement 与 asyncio 相结合

标签 python python-asyncio

寻找有关如何将 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/

相关文章:

python - 在 Python 中创建带零的 UUID

python - 当我在 Windows 上使用 os.dup2() 时,出现错误 : OSError: [Errno 9] Bad file descriptor

Python 异步 - 所有 aiohttp 请求立即发送

python - 异步 : warn about long-running handlers

python - 如何使包含 for 循环的函数成为非阻塞的?

python - 为什么我的异步函数是同步运行Python3.9?

python-asyncio - Python asyncio - 增加Semaphore的值

python - 如何在 python 中使用 re 拆分字符串,即 ('data+demo+on+saturday)。我想将 + 用于拆分器,但它抛出了一个错误

python - C++ 嵌入 python urllib

Python 异常未捕获