asyncio.create_task doesn't accept coroutine like objects
オープン
まだ誰も着手していません。
topic: asyncio
- 主要言語
- Python
- スター
- 5.1k
- フォーク
- 2.1k
- 平均マージ
- 1日 19時間
- マージ済み PR(30日)
- 82
説明
The following code fails to typecheck with latest mypy but works just fine at runtime.
from typing import Any
import asyncio
class MyCoro:
def __init__(self):
async def coro() -> None:
print("coro works!")
self.coro = coro()
def send(self, value: Any) -> None:
return self.coro.send(value)
def throw(self, exc: BaseException) -> None:
return self.coro.throw(exc)
def close(self) -> None:
return self.coro.close()
def __await__(self) -> Any:
return self.coro.__await__()
async def main() -> None:
coro = MyCoro()
await asyncio.create_task(coro)
asyncio.run(main())
Error:
cpython on isolate-decimal [?] via 🐍 v3.11.2
❯ mypy main.py
main.py:25: error: Argument 1 to "create_task" has incompatible type "MyCoro"; expected "Union[Generator[Any, None, <nothing>], Coroutine[Any, Any, <nothing>]]" [arg-type]
Found 1 error in 1 file (checked 1 source file)
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
mypy で例を再現し、asyncio.create_task の typeshed スタブを調べます。受け付ける引数の型と、MyCoro で示されている実行時の動作を比較します。例の型チェックが、asyncio の無関係な型付けの動作を弱めることなく通れば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- tooling
- issue の種類
- バグ
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 38/100