Python 如何为迭代优化问题构建芹菜工作流

Python 如何为迭代优化问题构建芹菜工作流,python,celery,Python,Celery,我正在尝试将现有的迭代优化解决方案迁移到芹菜工作流/任务集。当前的解决方案有一个“协调”优化过程的顶层循环。此循环: 生成一组初始任务,其中每个任务执行一些工作来测试问题可能解决方案的质量 等待返回一个任务结果 将此任务结果与任何以前的任务结果相结合,以获得总体“当前最佳”结果 根据到目前为止看到的结果,生成一个或多个新任务来运行,以探索不同的可能解决方案 继续此过程,使用已完成任务的结果生成新任务,直到达到某种优化停止条件 当这个过程发生时,外部观察者能够定期从协调器获取解决方案的当前状态

我正在尝试将现有的迭代优化解决方案迁移到芹菜工作流/任务集。当前的解决方案有一个“协调”优化过程的顶层循环。此循环:

  • 生成一组初始任务,其中每个任务执行一些工作来测试问题可能解决方案的质量
  • 等待返回一个任务结果
  • 将此任务结果与任何以前的任务结果相结合,以获得总体“当前最佳”结果
  • 根据到目前为止看到的结果,生成一个或多个新任务来运行,以探索不同的可能解决方案
  • 继续此过程,使用已完成任务的结果生成新任务,直到达到某种优化停止条件
当这个过程发生时,外部观察者能够定期从协调器获取解决方案的当前状态(以及关于该过程的其他元数据)

到目前为止,我还没有看到一个很好的建议方法用于芹菜中的这种工作流,在芹菜中,你不知道你需要提前完成哪些任务。我看不到一个明显的方法来使用可用的原语(链、组、和弦)来完成它,同时保留一个跟踪优化过程整体状态的顶级任务

显然,将单个子任务(测试单个可能的解决方案)作为芹菜任务,获取一些输入并返回结果是有意义的,这些任务应该并行运行。对我来说,“协调员”将是一项芹菜任务也是有道理的。它将保持优化过程的当前状态,并通过在子任务结果到达时更新协调器任务状态元数据向观察者发布更新。协调员将负责创建要运行的子任务,等待(单独)子任务完成,然后根据已经看到的结果创建要运行的新任务

然而,这似乎与我一直在读的所有建议背道而驰——基本上不是让一项任务同步等待另一项任务完成。事实上,在我构建的原型中,我必须将disable_sync_subtasks参数更改为False,以避免协调器在等待子任务完成时出错。它也没有使用任何经常被推荐的原语

有人能为我如何解决这个问题提供一些其他建议吗