尝试在 Python/gRPC 服务上使用 watchdog/watchmedo:检测到更改,代码不刷新

问题描述 投票:0回答:1

我正在构建一个 gRPC Python 应用程序,并尝试将

watchdog
watchmedo
扩展一起使用来侦听代码更改并重新加载,就像在这个问题中描述的那样。

当服务器加载并且我对某些文件进行更改时,我可以在 docker 日志中看到异常跟踪(我添加了

print('Starting server...')
行作为指导):

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...

看似是识别文件变化,但最终并没有刷新代码。

我通过添加一个断言失败的单元测试来测试这一点,然后再次运行测试。不会失败。

我正在使用

poetry
,我的
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 经验的人可以帮我弄清楚发生了什么吗?

python grpc python-watchdog grpcio
1个回答
0
投票

问题在于我如何安装卷。路径修正表明一切正常。 回溯与此无关。

© www.soinside.com 2019 - 2024. All rights reserved.