MagicStack / MagicStack/uvloop

Add support for loop.sock_sendto

Aperta
#561 5 commenti 3 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Lingua principale
Cython
Stelle
11.9k
Fork
616
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

  • uvloop version: 0.17.0 - 0.20.0
  • Python version: 3.11.4 - 3.12.5
  • Platform: Linux
  • Can you reproduce the bug with PYTHONASYNCIODEBUG in env?: Not a bug
  • Does uvloop behave differently from vanilla asyncio? How?: Yes, not implemented feature

The uvloop not implement method sock_sendto.

coroutine loop.sock_sendto(sock, data, address)
Send a datagram from sock to address. Asynchronous version of socket.sendto()

Return the number of bytes sent.
sock must be a non-blocking socket.
New in version 3.11.

The simple test case that reproduces the problem:

#!/usr/bin/env python3

import socket
import asyncio
import uvloop

uvloop.install()

async def run():
    addr = ("127.0.0.1", 1111)
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.setblocking(False)
    loop = asyncio.get_running_loop()
    await loop.sock_sendto(s, b'test', addr)

asyncio.run(run())

uvloop == 0.20.0 response:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.12/asyncio/runners.py", line 194, in run
    return runner.run(main)
           ^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/asyncio/runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "uvloop/loop.pyx", line 1517, in uvloop.loop.Loop.run_until_complete
  File "<stdin>", line 6, in run
  File "uvloop/loop.pyx", line 2629, in sock_sendto
NotImplementedError

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.

Direzione di ricerca

Inizia dal punto di ingresso sock_sendto in uvloop/loop.pyx, identificato dal traceback, e confronta il comportamento previsto con asyncio.loop.sock_sendto. Usa l’esempio UDP non bloccante fornito per verificare l’implementazione. Il lavoro è completato quando la chiamata invia il datagramma e restituisce il numero di byte inviati invece di sollevare NotImplementedError.

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

Valutazione

Stack tecnologico
python
Ambito
networking
Tipo di issue
Funzionalità
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Tranquilla
Chiarezza
Abbastanza chiara
Idoneità per principianti
68/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.