Python gRPC服务使用watchdog/watchmedo:检测到变更但代码未刷新
Python gRPC应用watchmedo热重载失效排查
正在构建Python gRPC应用,尝试用watchdog及其扩展watchmedo监听代码变更实现热重载。服务器启动后修改文件,Docker日志能看到重启触发,但代码并未刷新——新增断言失败的单元测试后,重新运行测试未出现预期失败。
异常日志
Starting server... Traceback (most recent call last): File "/code/main.py", line 4, in <module> serve() File "/code/app/server.py", line 20, in serve server.wait_for_termination() File "/code/.venv/lib/python3.12/site-packages/grpc/_server.py", line 1485, in wait_for_termination return _common.wait( ^^^^^^^^^^^^^ File "/code/.venv/lib/python3.12/site-packages/grpc/_common.py", line 156, in wait _wait_once(wait_fn, MAXIMUM_WAIT_TIMEOUT, spin_cb) File "/code/.venv/lib/python3.12/site-packages/grpc/_common.py", line 116, in _wait_once wait_fn(timeout=timeout) File "/usr/local/lib/python3.12/threading.py", line 655, in wait signaled = self._cond.wait(timeout) ^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/threading.py", line 359, in wait gotit = waiter.acquire(True, timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ KeyboardInterrupt Starting server...
配置详情
docker-compose.yml
service: build: . depends_on: postgres: condition: service_healthy command: poetry run watchmedo auto-restart -d "/app" -p '*.py' --recursive -- python main.py volumes: - .:/app ports: - '8010:8010'
项目结构
├── app ├── protos └── main.py
Dockerfile片段
FROM python:3.12.3-slim-bookworm RUN pip install poetry==1.8.3 WORKDIR /code COPY ... ./ RUN poetry install ... COPY app ./app COPY protos ./protos COPY main.py ./
依赖版本
[tool.poetry.dependencies] python = "^3.12" grpcio = "^1.63.0" grpcio-tools = "^1.63.0" watchdog = {extras = ["watchmedo"], version = "^4.0.1"}
恳请有gRPC经验的开发者帮忙排查问题原因。
内容的提问来源于stack exchange,提问作者nnov
相关产品推荐
相关产品推荐

