CookieJar.add_cookie_header() is linear in the number of stored domains
Mantenedores costumam responder em até 1 dia
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 54/100
- Tipo de issue
- Funcionalidade
- Clareza
- Razoavelmente clara
- Status de atividade
- Ativa
- Stack de tecnologia
- python
- Domínio
- backend, performance
Direção de pesquisa
Start with http.cookiejar.CookieJar.add_cookie_header(), DefaultCookiePolicy.domain_return_ok(), and clear_expired_cookies() in the standard library, then run the test_http_cookiejar tests. The issue identifies three possible optimization paths, from caching request host parsing to changing domain lookup and expiry tracking. Done means the chosen change reduces work as the number of stored domains grows while the cookie jar tests continue to pass.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Feature or enhancement
CookieJar.add_cookie_header() gets slower with every stored domain, even when only one cookie matches the request:
import timeit, urllib.request
from http.cookiejar import CookieJar, Cookie
def cookie(name, domain):
return Cookie(0, name, "v", None, False, domain, True, False, "/", True, False, None, True, None, None, {})
for n in (10, 100, 1000, 10000):
jar = CookieJar()
for i in range(n):
jar.set_cookie(cookie(f"c{i}", f"site{i}.example"))
req = urllib.request.Request("https://site0.example/")
t = min(timeit.repeat(lambda: jar.add_cookie_header(req), number=200, repeat=3)) / 200
print(f"{n:>6} domains: {t*1e6:8.1f} us")
10 domains: 37.9 us
100 domains: 320.8 us
1000 domains: 3086.9 us
10000 domains: 30450.6 us
Each call:
- Runs
DefaultCookiePolicy.domain_return_ok()for every stored domain, and each call re-parses the request URL viaeff_request_host(). - Runs
clear_expired_cookies(), which iterates every stored cookie.
Possible improvements, in increasing size:
- Compute
eff_request_host()once per request instead of once per domain. - With
DefaultCookiePolicy, look up only the domain keys that can match the request host (its dot-suffixes) instead of iterating all domains. - Track the earliest expiry in
set_cookie()and skip the sweep until it has passed.
HTTPX2 ships 2 and 3 as a CookieJar subclass, which passes test_http_cookiejar: https://github.com/pydantic/httpx2/pull/1285
I'm happy to send a PR.
- Linguagem predominante
- Python
- Estrelas
- 77.7k
- Forks
- 38.3k
- Merge médio
- 14h 29min
- PRs com merge (30d)
- 699
Preparar o ambiente
Inicia o contêiner de desenvolvimento do projeto no navegador, com a sua própria conta do GitHub.
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de python/cpython
-
topic-socket type-bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
python/cpython#160561 · 7 comentários ·
Mantenedores costumam responder em até 1 dia
-
tests topic-profiling type-bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
python/cpython#160334 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
extension-modules type-bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
Mantenedores costumam responder em até 1 dia
-
Remove unused FVS_* macrosAbertainterpreter-core type-feature
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 78/100
python/cpython#160109 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
extension-modules type-bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
python/cpython#160001 · 3 comentários ·
Mantenedores costumam responder em até 1 dia
Todas as issues de python/cpython
Issues semelhantes
-
README.zh-CN/ja/es still hard-code 501 test counts after README.md went count-freeTalvez já em andamento @Aaqibhafeezkhan assumiu hoje. Abertabeginner documentation good first issue
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
BistaDinesh03/critique#164 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
bug IO
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 65/100
MrNeRF/LichtFeld-Studio#3824 ·
Mantenedores costumam responder em até 1 dia
-
bug confirmed issue
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
open-webui/open-webui#33200 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Lychee link check failedAberta
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 72/100
-
The changelog workflow excludes otelbot but not dependabot, so every Dependabot pull request fails the changelog checkTalvez já em andamento @ocelotl assumiu hoje. Aberta
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 82/100
open-telemetry/opentelemetry-python#5825 ·
Mantenedores costumam responder em até 2 dias