考虑以下一对协程:
import asyncio
from twisted.internet.defer import ensureDeferred
async def _something_that_does_io():
return b"A stream or buffer of some sort"
async def public_interface():
await asyncio.wait(_something_that_does_io)
return "metadata and connection details"
d = ensureDeferred(public_interface())
这里ensureDeferred
,在评估函数时,会导致builtins.RuntimeError: no running event loop
被提升。
在我的案例中,现实世界的应用程序试图确保库protocol.WebSocketCommonProtocol.recv
中的延迟websockets
。
该web3
库websockets
用于连接到提供程序,我正在尝试创建一个简单的机制来添加和处理背压。
添加类似的东西reactor.callInThread(asyncio_event_loop.run_forever)
没有帮助,因为显然它是特定于线程的东西。
这里到底发生了什么?我怎么ensureDeferred
会有这样的协程?