【问题标题】:How to run async Twisted reactor and asyncio loops infinitely如何无限运行异步 Twisted reactor 和 asyncio 循环
【发布时间】:2021-11-13 18:06:20
【问题描述】:

我有两个库,它们都提供侦听器功能(在不同的端口上运行)并侦听网络活动。 (我的程序在它们之间提供了一个接口层。)

问题在于使用 Twisted:

from twisted.internet import reactor
reactor.run()

其他使用异步

import asyncio
loop = asyncio.get_event_loop()
loop.create_task(...)
loop.run_forever()

这两个调用似乎都阻塞了主线程:如果我把一个放在另一个之前,它们都不会运行。

【问题讨论】:

    标签: python python-asyncio twisted


    【解决方案1】:

    您可以使用 Twisted 的 AsyncioSelectorReactor 来完成此操作。你可以告诉它使用主异步事件循环,而不是让 Twisted 创建自己的 Reactor 循环。

    import asyncio
    
    from twisted.internet import asyncioreactor
    asyncioreactor.install(asyncio.get_event_loop())
    
    loop = asyncio.get_event_loop()
    loop.create_task(...)
    
    reactor = asyncioreactor.AsyncioSelectorReactor()
    reactor.run()
    

    您只需在reactor 上调用run,就会调用run_forever

    【讨论】:

    • 安装反应器后,您不会实例化它。相反,您只需在 安装所需的反应器后导入 twisted.internet.reactor
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-12
    • 2023-04-05
    • 2020-05-11
    • 1970-01-01
    相关资源
    最近更新 更多