mirror of
https://github.com/astral-sh/uv
synced 2026-01-23 06:20:12 -05:00
## Summary This PR consolidates the concurrency limits used throughout `uv` and exposes two limits, `UV_CONCURRENT_DOWNLOADS` and `UV_CONCURRENT_BUILDS`, as environment variables. Currently, `uv` has a number of concurrent streams that it buffers using relatively arbitrary limits for backpressure. However, many of these limits are conflated. We run a relatively small number of tasks overall and should start most things as soon as possible. What we really want to limit are three separate operations: - File I/O. This is managed by tokio's blocking pool and we should not really have to worry about it. - Network I/O. - Python build processes. Because the current limits span a broad range of tasks, it's possible that a limit meant for network I/O is occupied by tasks performing builds, reading from the file system, or even waiting on a `OnceMap`. We also don't limit build processes that end up being required to perform a download. While this may not pose a performance problem because our limits are relatively high, it does mean that the limits do not do what we want, making it tricky to expose them to users (https://github.com/astral-sh/uv/issues/1205, https://github.com/astral-sh/uv/issues/3311). After this change, the limits on network I/O and build processes are centralized and managed by semaphores. All other tasks are unbuffered (note that these tasks are still bounded, so backpressure should not be a problem).
70 lines
2.4 KiB
TOML
70 lines
2.4 KiB
TOML
[package]
|
|
name = "uv-dev"
|
|
version = "0.0.1"
|
|
description = "Build wheels from source distributions"
|
|
publish = false
|
|
|
|
edition = { workspace = true }
|
|
rust-version = { workspace = true }
|
|
homepage = { workspace = true }
|
|
documentation = { workspace = true }
|
|
repository = { workspace = true }
|
|
authors = { workspace = true }
|
|
license = { workspace = true }
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[dependencies]
|
|
distribution-filename = { workspace = true }
|
|
distribution-types = { workspace = true }
|
|
install-wheel-rs = { workspace = true }
|
|
pep440_rs = { workspace = true }
|
|
pep508_rs = { workspace = true }
|
|
uv-build = { workspace = true }
|
|
uv-cache = { workspace = true, features = ["clap"] }
|
|
uv-client = { workspace = true }
|
|
uv-configuration = { workspace = true }
|
|
uv-dispatch = { workspace = true }
|
|
uv-distribution = { workspace = true }
|
|
uv-fs = { workspace = true }
|
|
uv-installer = { workspace = true }
|
|
uv-interpreter = { workspace = true }
|
|
uv-normalize = { workspace = true }
|
|
uv-requirements = { workspace = true, features = ["schemars"] }
|
|
uv-resolver = { workspace = true }
|
|
uv-types = { workspace = true }
|
|
uv-workspace = { workspace = true, features = ["schemars"] }
|
|
|
|
# Any dependencies that are exclusively used in `uv-dev` should be listed as non-workspace
|
|
# dependencies, to ensure that we're forced to think twice before including them in other crates.
|
|
anstream = { workspace = true }
|
|
anyhow = { workspace = true }
|
|
clap = { workspace = true, features = ["derive", "wrap_help"] }
|
|
fs-err = { workspace = true, features = ["tokio"] }
|
|
futures = { workspace = true }
|
|
indicatif = { workspace = true }
|
|
itertools = { workspace = true }
|
|
owo-colors = { workspace = true }
|
|
petgraph = { workspace = true }
|
|
poloto = { version = "19.1.2" }
|
|
pretty_assertions = { version = "1.4.0" }
|
|
resvg = { version = "0.29.0" }
|
|
rustc-hash = { workspace = true }
|
|
schemars = { workspace = true }
|
|
serde = { workspace = true }
|
|
serde_json = { workspace = true }
|
|
tagu = { version = "0.1.6" }
|
|
tokio = { workspace = true }
|
|
tracing = { workspace = true }
|
|
tracing-durations-export = { workspace = true, features = ["plot"] }
|
|
tracing-indicatif = { workspace = true }
|
|
tracing-subscriber = { workspace = true }
|
|
walkdir = { workspace = true }
|
|
|
|
[target.'cfg(target_os = "windows")'.dependencies]
|
|
mimalloc = { version = "0.1.39" }
|
|
|
|
[target.'cfg(all(not(target_os = "windows"), not(target_os = "openbsd"), any(target_arch = "x86_64", target_arch = "aarch64", target_arch = "powerpc64")))'.dependencies]
|
|
tikv-jemallocator = { version = "0.5.4" }
|