Skip to content

Commit f421645

Browse files
committed
🔧 chore: optimize dependency configuration and improve logging
1 parent 2a5efdf commit f421645

File tree

6 files changed

+262
-7
lines changed

6 files changed

+262
-7
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,6 @@ dist/
66
.cursorrules
77

88
__version__.py
9+
10+
.coverage
11+
coverage.xml

nanoflow/config.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,22 @@ class TaskConfig(BaseModel):
99

1010

1111
class WorkflowConfig(BaseModel):
12+
"""
13+
Workflow config file.
14+
15+
Example:
16+
>>> config = WorkflowConfig(
17+
>>> name="test",
18+
>>> tasks={
19+
>>> "task1": TaskConfig(command="echo 'task1'"),
20+
>>> "task2": TaskConfig(command="echo 'task2'", deps=["task1"]),
21+
>>> "task3": TaskConfig(command="echo 'task3'", deps=["task2"]),
22+
>>> }
23+
>>> )
24+
>>> config.to_nodes()
25+
>>> {'task1': [], 'task2': ['task1'], 'task3': ['task2']}
26+
"""
27+
1228
name: str
1329
tasks: dict[str, TaskConfig]
1430

nanoflow/task.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from collections.abc import Callable
55
from typing import Any, Generic, ParamSpec, TypeVar, overload
66

7+
from loguru import logger
78
from pydantic import BaseModel, ConfigDict
89

910
from .resource_pool import ResourcePool
@@ -26,6 +27,7 @@ def submit(self, *args: P.args, **kwargs: P.kwargs) -> asyncio.Task[R]:
2627
async def wrapper_fn():
2728
if self.resource_pool is not None:
2829
resource = await self.resource_pool.acquire()
30+
logger.info(f"Acquired resource: {resource}")
2931
if self.resource_modifier is not None:
3032
fn = self.resource_modifier(self.fn, resource)
3133
else:
@@ -34,6 +36,7 @@ async def wrapper_fn():
3436
return await asyncio.to_thread(fn, *args, **kwargs)
3537
finally:
3638
self.resource_pool.release(resource)
39+
logger.info(f"Released resource: {resource}")
3740
else:
3841
return await asyncio.to_thread(self.fn, *args, **kwargs)
3942

nanoflow/utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,14 @@ def get_available_gpus(threshold=0.05) -> list[int]:
5454
@workflow
5555
async def execute_parallel_tasks(config: WorkflowConfig):
5656
def create_gpu_task(command: str) -> Task:
57-
environ = os.environ.copy()
58-
5957
def set_visible_gpu(fn: Callable[[], bytes], resource: int) -> Callable[[], bytes]:
58+
environ = os.environ.copy()
6059
environ["CUDA_VISIBLE_DEVICES"] = str(resource)
6160

6261
def inner_fn() -> bytes:
6362
res = subprocess.run(command, shell=True, env=environ)
6463
if res.returncode != 0:
64+
# TODO: raise an exception
6565
logger.error(f"Command failed with return code {res.returncode}")
6666
return res.stderr
6767
return res.stdout

pyproject.toml

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,20 @@ description = "A simple and efficient workflow framework for Python"
55
authors = [{ name = "Zhan Rongrui", email = "[email protected]" }]
66
dependencies = [
77
"loguru>=0.7.0",
8-
"matplotlib>=3.9.0",
98
"networkx>=3.0",
109
"pydantic>=2.0.0",
11-
"rich>=13.8.0",
1210
"toml>=0.10.0",
11+
"rich>=13.8.0",
1312
"typer>=0.12.5",
1413
]
1514
requires-python = ">=3.11"
1615
readme = "README.md"
1716
license = { text = "MIT" }
1817

18+
[project.optional-dependencies]
19+
server = ["fastapi>=0.115.0", "uvicorn>=0.30.6"]
20+
plot = ["matplotlib>=3.9.0"]
21+
1922
[project.urls]
2023
Homepage = "https://github.com/zrr1999/nanoflow.git"
2124
Repository = "https://github.com/zrr1999/nanoflow.git"
@@ -78,6 +81,14 @@ write_template = "__version__ = '{}'"
7881
includes = ["nanoflow"]
7982
source-includes = ["README.md"]
8083

84+
[tool.uv]
85+
dev-dependencies = [
86+
"xdoctest",
87+
"pytest",
88+
"pytest-cov",
89+
"coverage",
90+
]
91+
8192
[build-system]
8293
requires = ["pdm-backend"]
8394
build-backend = "pdm.backend"

0 commit comments

Comments
 (0)