在代码更改时自动重新加载 Dask worker 容器

Reload Dask worker containers automatically on code change

我有下面提交 N 个工人的 Dask 代码,其中每个工人都在一个 Docker 容器中实现:

default_sums = client.map(process_asset_defaults, build_worker_args(req, numWorkers))
future_total_sum = client.submit(sum, default_sums)
total_defaults_sum = future_total_sum.result()

其中 process_asset_defaults 是 worker 中的一个方法。

问题是在开发环境中,当我更改 worker 的代码时,我需要手动重启所有容器才能使更改生效。

有没有办法在不重启 worker 的情况下用新代码重新加载 worker?

注意:代码在Docker卷中,我直接在Visual Studio代码卷中更改。

你可以用文件的当前内容创建一个变量,然后循环检查文件内容是否不等于之前的内容,如果不是你可以做一些事情

before = open("/code/app/worker.py").read()

while True:
   current = open("/code/app/worker.py").read()
   if current != before:
       dostuff()
       before = current

如果改变的代码是函数的内容,那么可以使用autoreload:

import importlib
importlib.reload(process_asset_defaults) # if this is the function that needs updating

有关更多详细信息,请参阅 blog or docs