Allow context for tasks that block the event loop
まだ誰も着手していません。
評価
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 初心者へのやさしさ
- 25/100
- issue の種類
- 機能追加
- 明瞭さ
- 説明が足りない
- 活発さ
- 停滞
- 技術スタック
- python
- 領域
- backend, observability
調査の方向性
まず uvloop/cbhandles.pyx の 268-273 行を読み、PYTHONASYNCIODEBUG=1 の下で server.py にある FastAPI の再現を使って、その debug slow-log の動作を asyncio の実装と比較してください。この issue では、受け入れられる出力も実装も定義されていないため、コーディングする前に、望ましいコンテキストとスタックトレースの動作を明確にしてください。
索引モデルが issue の本文から書いたものです。
説明
Hi all,
This is probably more of a discussion than an actual issue and I fully appreciate that this could be more of a Python asyncio question versus anything specific to uvloop's implementation (I've also started a discussion there), but I figured I'd ask here first because uvloop is wonderful and you all clearly have a deep understanding of creating an event loop implementation in Python.
My issue is this: when debug mode is enabled for the Python event loop, is it somehow possible to get slow logs to tell us more about the context the task is running in?
The motivation is that in many asyncio server frameworks like FastAPI, it is critical to not block the event loop but using asyncio's debug mode provides output that's not helpful.
Consider the following FastAPI server:
# server.py
# run with PYTHONASYNCIODEBUG=1 uvicorn server:app --reload --port 8000 --host 0.0.0.0
import time
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
time.sleep(2) # intentionally block event loop for 2 seconds
return {"message": "Hello World"}
If you curl http://127.0.0.1:8000/, you'll see something along the lines of:
Executing <Task finished name='Task-4' coro=<RequestResponseCycle.run_asgi() done, defined at /Users/mike.sukmanowsky/code/z/z/.venv/lib/python3.13/site-packages/uvicorn/protocols/http/h11_impl.py:401> result=None created at /Users/mike.sukmanowsky/code/z/z/.venv/lib/python3.13/site-packages/uvicorn/protocols/http/h11_impl.py:250> took 2.006 seconds
This is consistent with what uvloop and other event loop implementations do here.
But from this output I cannot determine:
- What endpoint this occurred on
- The full stack trace of my user-defined code that might point me to the culprit that's blocking the loop
For ASGI frameworks like FastAPI, blocking the event loop effectively means a death for concurrency.
I'm unaware of any way to make outputs more useful here, but I'm very much hoping either 1) I've missed an obvious way to do this or 2) this inspires some discussion that could lead to changes that'll eventually help all Python asyncio users better troubleshoot issues like this.
- 主要言語
- Cython
- スター
- 11.9k
- フォーク
- 615
- PR マージ指標
- 30日以内にマージされた PR はありません
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
MagicStack/uvloop のほかの issue
-
License not clear オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
MagicStack/uvloop#759 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
MagicStack/uvloop#741 · リアクション 2 件 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
MagicStack/uvloop#702 · コメント 8 件 · リアクション 9 件 ·
-
難易度 4/5 3〜5日 初心者へのやさしさ 25/100
MagicStack/uvloop#766 ·
-
難易度 4/5 3〜5日 初心者へのやさしさ 52/100
MagicStack/uvloop#765 ·
MagicStack/uvloop の issue をすべて見る
似ている issue
-
bug customer-eng Durable Agents Inngest status: needs triage
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
-
integration: elevenlabs
難易度 1/5 1時間未満 初心者へのやさしさ 88/100
home-assistant/core#182944 · コメント 1 件 ·
-
ai-observability bug team/ai-observability
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
vicharanashala/fln#563 ·