Python打字和期货

时间:2017-07-15 07:52:00

标签: python future python-asyncio typing concurrent.futures

我很高兴在Python 3中使用typing模块。此外,我很高兴使用asyncio代替twisted,{{1}和替代品。

我的问题是如何正确定义协程的结果?

我们应该告诉它只是一个协程吗?例1:

tornado

或者我们应该将coroutine的结果类型定义为返回值的类型?例2:

async def request() -> asyncio.Future:
    pass

如果是,那么如何使用返回期货的普通函数?例3:

async def request() -> int:
    pass

这是正确的方法吗?那么我们怎么能分辨出未来的结果呢?

2 个答案:

答案 0 :(得分:3)

一般情况下,您应该定期返回值(例如intfloatboolNone等),但如果您将其用作可调用值应该是这样的:

async def bar(x: int) -> str:
    return str(x)

cbar: Callable[[int], Awaitable[str]] = bar

有关详细信息:here

您也可以查看此issue mypy支持。

答案 1 :(得分:0)

正如@jonrsharpe所说,typing.Awaitable非常适合这项任务。