如何 运行 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
。
我有两个库,它们都提供侦听器功能(运行 在不同的端口上)并侦听网络 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
。