当前位置: 首页 > 面试题库 >

有没有一种方法可以强制执行模块间的依赖关系/初始化顺序?

尹正奇
2023-03-14
问题内容

使用Azure IoT
Edge,我没有找到任何方法来保证部署中容器/模块的初始化顺序。例如,假设我有两个模块,A和B。A是服务器,而B是依赖A的客户端。据我所知,没有办法保证A在B之前启动。

Azure IoT Edge部署模板符合Docker Engine
API,我找不到任何通过该API强制依赖关系的方法。解决方法是,我不假设每个容器的代码中都在运行哪个容器。这行得通,尽管额外代码的开销并不理想,尤其是考虑到docker-
compose之类的工具会使执行初始化顺序变得微不足道。

我想做这样的事情(src:https :
//docs.docker.com/compose/compose-
file/):

version: "3.7"
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

作为一种解决方法,并按照上面的示例,在web容器中,我一直在执行以下操作以确保postgresweb执行postgres依赖操作之前启动并运行:

postgresIsUp = False
while not postgresIsUp:
    try:
        pingPostgres()
        postgresIsUp = True
    except PingError:
        print("postgres is not yet running")

当然,这是一个人为设计示例,具有明显的缺陷,但它说明了解决方法的要点。


问题答案:

不可以,IotEdge不支持按特定顺序初始化模块。请注意,即使可以按特定顺序启动它们来解决依赖关系,但如果其中一个模块崩溃,您仍然会遇到问题。EdgeHub将重新启动它,但是您将失去初始化顺序。

Mike
Yagley(致力于IotEdge的贡献者之一)在github上对此问题进行了解释。



 类似资料:
  • 问题内容: 如果输入大小太小,则库会自动序列化 流中地图的执行,但是这种自动化不会并且也不会考虑地图操作的繁重程度。有没有办法 强制parallelStream()实际并行化CPU重映射? 问题答案: 似乎存在根本的误解。链接的“问答”讨论了由于OP没有 看到预期的加速,流显然不能并行工作。结论是,有没有好处在 并行处理工作负载是否太小,不,有一个自动回退到顺序执行。 实际上是相反的。如果您请求并

  • 在php 5.1中, 扩展之间的内部依赖是可以强制性的. 由于扩展可以静态构建到php中, 也可以构建为共享对象动态加载, 因此强制依赖需要在两个地方实现. 配置时模块依赖 第一个位置是你在本章课程中刚刚看到的config.m4文件中. 你可以使用PHP_ADD_EXTENSION_DEP(extname, depname[ , optional])宏标识extname这个扩展依赖于depname

  • 问题内容: 我想知道使用像这样的构造是否可靠: 我是否有可能因为初始化块将在初始化块之前执行? (关于我为什么不在上层init的末尾进行初始化。块:只是味道问题;如果所描述的构造不可靠,我将这样做) 问题答案: 是的,保证静态初始化程序块按文本顺序执行。 从JLS,第12.4.1节: 目的是类或接口类型具有一组初始化器,这些初始化器将其置于一致状态,并且该状态是其他类观察到的第一个状态。 静态初始

  • 问题内容: 我是来自C 背景的Python新手。虽然我知道用我以前的C 知识来尝试找到匹配的概念并不是Pythonic,但我认为这个问题仍然是一个普遍的问题: 在C 中,由于C 无法确定哪个全局/静态变量将首先在编译单元中初始化,因此存在一个众所周知的全局/静态变量初始化顺序失败的问题,因此,全局/静态变量取决于不同编译中的另一个变量单元可能比其依赖项对应的对象早初始化,并且当依赖项开始使用依赖项

  • 简而言之:有没有一种方法可以在gcc或CLANG中不推荐命名空间? 长: 现在我想知道是否有更好的方法来做类似的事情,比如将名称空间util的使用标记为不推荐使用。 我们使用GCC4.7.3作为生产编译器,但是针对clang进行构建和测试,以尝试捕捉gcc的细节;因此,在这些编译器上工作的东西会有所帮助。

  • 作为一个学校项目,我正在开发一个坦克游戏,我正在努力使它尽可能的用户友好(比如可定制的按键绑定、显示设置)。然而,我不希望游戏窗口失去它的比例,所以我想我会在游戏窗口的两侧添加边框,以支持宽屏幕。 我附上了一张图片来说明我在寻找什么: 因此,为了让它工作,我需要一种制作“屏幕层”的方法。基本层是整个屏幕,在屏幕两侧添加了一些图形和显示分数的字体。然后,第二层将呈现在屏幕的中间,这将是游戏窗口,其宽