如何 运行 async Twisted reactor 和 asyncio 无限循环

How to run async Twisted reactor and asyncio loops infinitely

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

问题在于使用 Twisted:

from twisted.internet import reactor
reactor.run()

而另一个使用asyncio

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

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

您可以使用 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