Blocking synchronous I/O (time.sleep, urllib) inside async event loop degrades performance

Aperta
#56 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
72/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Tranquilla
Stack tecnologico
python

Direzione di ricerca

Inizia in local_browser.py, in _is_local_cdp_available(), _local_cdp_page_targets(), _ensure_local_cdp_page_target() e _ensure_local_cdp_browser(); esamina come vengono chiamati questi helper e rivedi la dipendenza httpx esistente in pyproject.toml. Sostituisci le operazioni HTTP e sleep bloccanti con equivalenti asincroni, quindi verifica che l'avvio di CDP non blocchi né impedisca la cancellazione del ciclo di polling.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Description

In \local_browser.py, several synchronous I/O operations run inside async methods, blocking the asyncio event loop:

  1. _is_local_cdp_available()\ (line 58) and _local_cdp_page_targets()\ (line 73) use \urllib.request\ synchronously
  2. _ensure_local_cdp_browser()\ (line 262) uses \ ime.sleep(0.2)\ in a polling loop, blocking the loop for up to 10 seconds
  3. _ensure_local_cdp_page_target()\ (line 93) uses synchronous urllib

\httpx\ is already listed as a dependency in \pyproject.toml\ (line 11) but isn't used anywhere.

Impact

  • The event loop is blocked during CDP browser startup for up to 10 seconds
  • \ ime.sleep()\ is not interruptible (unlike \syncio.sleep())
  • Concurrent operations on the same event loop cannot make progress
  • The polling loop cannot be cancelled mid-wait

Suggested Fix

Replace the synchronous helpers with async versions using \httpx.AsyncClient, convert _ensure_local_cdp_browser\ to async, and use \syncio.sleep()\ instead of \ ime.sleep().

The fix is straightforward since httpx is already a project dependency.

Lingua principale
Python
Stelle
6k
Fork
385
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di microsoft/Webwright

Tutte le issue di microsoft/Webwright

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.