key insertion is linear in size of document
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 45/100
- issue の種類
- バグ
- 明瞭さ
- おおむね明確
- 活発さ
- 静か
- 技術スタック
- python
- 領域
- performance
調査の方向性
まず、tomlkit のテーブルキー挿入パスに対して inline Python benchmark を実行し、各代入によってドキュメントがどのように更新されるかを調べます。ドキュメントのサイズに伴って増加する処理を追跡し、その後 benchmark を再実行して、キーの数を 2 倍にしても合計時間がもはやおよそ 4 倍にならないことを確認して修正を検証します。
索引モデルが issue の本文から書いたものです。
説明
So inserting lots of keys is quadratic in the number of keys
#!/usr/bin/env python3
import gc
import time
import tomlkit
def insert_keys(n: int) -> float:
doc = tomlkit.parse("[t]\n")
table = doc["t"]
gc.collect()
gc.disable()
try:
start = time.perf_counter()
for i in range(n):
table[f"k{i}"] = i
elapsed = time.perf_counter() - start
finally:
gc.enable()
return elapsed
def main() -> None:
print()
print(f"{'N':>7} {'total (ms)':>12} {'us/key':>10} {'ratio':>7}")
prev = None
for n in (500, 1000, 2000, 4000, 8000):
elapsed = insert_keys(n)
total_ms = elapsed * 1e3
us_per_key = elapsed / n * 1e6
ratio = "" if prev is None else f"{elapsed / prev:6.2f}x"
print(f"{n:>7} {total_ms:12.2f} {us_per_key:10.2f} {ratio:>7}")
prev = elapsed
if __name__ == "__main__":
main()
results
N total (ms) us/key ratio
500 59.58 119.16
1000 225.36 225.36 3.78x
2000 983.92 491.96 4.37x
4000 3569.23 892.31 3.63x
8000 16247.27 2030.91 4.55x
in which each doubling of the number of keys causes the benchmark to take four times as long.
- 主要言語
- Python
- スター
- 850
- フォーク
- 163
- 平均マージ
- 13分
- マージ済み PR(30日)
- 2
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
python-poetry/tomlkit のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
python-poetry/tomlkit#546 · コメント 2 件 ·
-
難易度 3/5 1〜2日 初心者へのやさしさ 68/100
python-poetry/tomlkit#603 ·
-
難易度 3/5 1〜2日 初心者へのやさしさ 52/100
python-poetry/tomlkit#580 · コメント 1 件 ·
-
難易度 3/5 1〜2日 初心者へのやさしさ 72/100
python-poetry/tomlkit#577 ·
-
難易度 5/5 1週間以上 初心者へのやさしさ 20/100
python-poetry/tomlkit#574 · コメント 5 件 ·
python-poetry/tomlkit の issue をすべて見る
似ている issue
-
bug confirmed issue
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
open-webui/open-webui#30750 · コメント 1 件 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
-
enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
OpenwaterHealth/openmotion-bloodflow-app#604 · コメント 1 件 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
-
good first issue
難易度 1/5 1時間未満 初心者へのやさしさ 90/100