gpt4 book ai didi

python-trio - Future/Promise 就像 Python 中 Trio 的东西?

转载 作者:行者123 更新时间:2023-12-04 01:27:25 27 4
gpt4 key购买 nike

假设我有一个 Messenger 类,它负责发送和接收消息。现在我有一个服务可以发送请求并等待通过它的响应,将每对与消息中的 id 字段匹配。在 asyncio 中我会这样做:

class Service:
...

async def request(self, req):
new_id = self._gen_id()
req.id = new_id
fu = asyncio.Future()
self._requests[new_id] = fu
await self._messenger.send(req)
return await fu

def handle_response(self, res):
try:
fu = self._requests.pop(res.req_id)
except KeyError:
return

fu.set_result(res)

所以我可以从不同的任务发出多个请求,并在每个任务中等待相应的响应。 (有些消息可能没有相应的响应,以另一种方式处理。)

但我如何在 Trio 中执行此操作?我应该为每个请求创建一个事件/条件/队列并将响应放在预定义的位置吗?如果是,哪个最适合这种情况?或者有其他方法可以做到这一点?

最佳答案

您可以创建一个包含Event 和您的结果的简单类。

但是,严格来说,事件是多余的,因为多个任务可以等待一个事件,而您不需要,因此您应该使用 trio.hazmat.wait_task_rescheduled。这也为您提供了一个 Hook ,当请求任务在收到回复之前被取消时,您可以使用它来做一些事情。

http://trio.readthedocs.io/en/latest/reference-hazmat.html#low-level-blocking

关于python-trio - Future/Promise 就像 Python 中 Trio 的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49229976/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com