我有以下场景:我有一个python服务器,在收到请求后,需要解析一些信息,尽快将结果返回给用户,然后自行清理。我尝试使用以下逻辑来设计它:
Consumer: *==* (wait for result) *====(continue running)=====...
\ / return
Producer: *======(prase)====*=*
\
Cleanup: *==========*
我一直在尝试使用异步任务和协程来使这种情况无效。我尝试的一切最终要么是生产者在返回之前等待清理完成,要么是返回杀死清理。理论上我可以让消费者在向用户显示结果后调用清理,但我拒绝相信 Python 不知道如何“即发即弃”并返回。
例如,这段代码:
import asyncio
async def Slowpoke():
print("I see you shiver with antici...")
await asyncio.sleep(3)
print("...pation!")
async def main():
task = asyncio.create_task(Slowpoke())
return "Hi!"
if __name__ == "__main__":
print(asyncio.run(main()))
while True:
pass
返回:
I see you shiver with antici...
Hi!
并且永远不会到达...pation
。
我错过了什么?