MagicStack / MagicStack/uvloop

Add support for loop.sock_sendto

オープン
#561 コメント 5 件 リアクション 3 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

主要言語
Cython
スター
11.9k
フォーク
616
PR マージ指標
30日以内にマージされた PR はありません

説明

  • 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

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

traceback によって特定された uvloop/loop.pyx の sock_sendto エントリポイントから開始し、期待される動作を asyncio.loop.sock_sendto と比較してください。提供されているノンブロッキング UDP の例を使って実装を検証してください。呼び出しがデータグラムを送信し、NotImplementedError を発生させる代わりに送信バイト数を返せば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
python
領域
networking
issue の種類
機能追加
難易度
3/5
見積もり時間
1〜2日
活発さ
静か
明瞭さ
おおむね明確
初心者へのやさしさ
68/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。