GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — Fix `bm_fastapi` failing when an HTTP proxy is configured by sendaoYan · Pull Request #505 · python/pyperformance

Conversation

@sendaoYan

@sendaoYan sendaoYan commented Nov 5, 2026

Copy link
Copy Markdown
Contributor

Fixes #504

Problem

The fastapi benchmark (bm_fastapi) fails when the environment has an HTTP
proxy configured — e.g. HTTP_PROXY/http_proxy set, which is common in CI or
corporate environments — and 127.0.0.1 is not listed in NO_PROXY.

The benchmark starts a uvicorn server on 127.0.0.1 and then talks to it with
httpx.AsyncClient(). Because httpx reads proxy configuration from the
environment by default, the request to http://127.0.0.1:<port>/items/0 is
routed through the proxy. The proxy cannot reach the benchmark machine's
loopback address, so it returns 503 Service Unavailable and the benchmark
dies:

httpx.HTTPStatusError: Server error '503 Service Unavailable' for url 'http://127.0.0.1:40027/items/0'
...
RuntimeError: Benchmark died
ERROR: Benchmark fastapi failed: Benchmark died

Fix

Create the client with trust_env=False so it never reads proxy (or .netrc)
settings from the environment:

async with httpx.AsyncClient(trust_env=False) as client:

This is correct for this benchmark because it only ever connects to its own
loopback server, so it must never be routed through a proxy. In environments
with no proxy configured, trust_env=False behaves identically to the default,
so benchmark results are unaffected for the common case.

Only bm_fastapi is affected: the other networking benchmarks
(bm_tornado_http, bm_asyncio_tcp, bm_asyncio_websockets, bm_async_tree)
use clients that do not read proxy environment variables.

Testing

Reproduced by running the benchmark with proxy environment variables inherited
and 127.0.0.1 absent from NO_PROXY:

$ python -m pyperformance run bm_fastapi --inherit-environ http_proxy,https_proxy,no_proxy
  • Before the change: Benchmark fastapi failed: Benchmark died with the 503 above.
  • After the change: the benchmark completes and reports a result.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@sendaoYan
Fix bm_fastapi benchmark failing when an HTTP proxy is configured
142b5ec
httpx.AsyncClient() reads HTTP_PROXY/HTTPS_PROXY/NO_PROXY from the
environment by default. When a proxy is set, the benchmark routes
requests to its local 127.0.0.1 server through that proxy, which cannot
reach the loopback server and returns 503 Service Unavailable, causing
the benchmark to fail ("Benchmark died").

Pass trust_env=False since the benchmark only ever talks to localhost.
@sendaoYan
sendaoYan force-pushed the fix-fastapi-proxy branch from 05d1fe2 to 142b5ec Compare November 5, 2026 15:13
savannahostrowski
savannahostrowski approved these changes Nov 6, 2026
View reviewed changes

@savannahostrowski savannahostrowski left a comment

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, good catch! I’m happy to merge this once #502 is in and CI is green. That should fix the unrelated Tornado/PyPy test failure!

Thank you!

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

sendaoYan reacted with heart emoji
All reactions
  • ❤️ 1 reaction
@hugovk
Merge branch 'main' into fix-fastapi-proxy
26d1946
@sendaoYan

sendaoYan commented Nov 7, 2026

Copy link
Copy Markdown
Contributor Author

Ah, good catch! I’m happy to merge this once #502 is in and CI is green. That should fix the unrelated Tornado/PyPy test failure!

Thank you!

Thanks for the review, Savannah! #502 has landed and Hugo already merged main
into the branch, so the head is now 26d1946.

The new workflow runs are currently sitting in action_required — CI on a fork
PR needs a maintainer to approve the run, so nothing has started yet. Before the
merge the only failure was ubuntu-latest - pypy-3.11, which #502 should have
fixed.

Happy to adjust anything if you'd prefer a different commit shape before merging.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@sendaoYan
Merge branch 'main' into fix-fastapi-proxy
44f94bc
@sendaoYan sendaoYan mentioned this pull request Nov 9, 2026
Fix bm_fastapi benchmark failing with httpx.PoolTimeout under load #509
Open
@savannahostrowski
Merge branch 'main' into fix-fastapi-proxy
06e5e7f
@savannahostrowski
savannahostrowski merged commit 309dabb into python:main Nov 9, 2026
@sendaoYan

sendaoYan commented Nov 10, 2026

Copy link
Copy Markdown
Contributor Author

Thanks for the review and merge!

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@savannahostrowski savannahostrowski savannahostrowski approved these changes

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

bm_fastapi fails with "503 Service Unavailable" when a proxy is configured

Uh oh!

There was an error while loading. Please reload this page.

3 participants

@sendaoYan @savannahostrowski @hugovk
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.