擅长:python、mysql、java
<p>运行时错误的设计正是为了阻止您尝试执行的操作<code>run_until_complete</code>是一个阻塞调用,在异步def中使用它将停止外部事件循环</p>
<p>简单的解决方法是通过实际的异步方法公开所需的功能,例如:</p>
<pre><code>class Resource:
def name(self):
return loop.run_until_complete(self.name_async())
async def name_async(self):
resource = await _get_remote_resource(self.key)
return f"{resource.pk}"
</code></pre>
<p>然后在fastapi中,您将以本机方式访问API:</p>
<pre><code>@app.get("")
async def get(key):
return await Resource(key).name_async()
</code></pre>
<p>您还可以定义<code>__str__(self)</code>来返回<code>self.name()</code>,但最好避免这样做,因为像<code>str()</code>这样的基本内容也应该可以从asyncio内部调用(由于在日志记录、调试等中使用)</p>