如何在与提交它的机器不同的机器上获得Dask计算结果?

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

我在Django服务器后面使用Dask,我在这里总结了基本设置:https://github.com/MoonVision/django-dask-demo/可以在这里找到Dask客户端:https://github.com/MoonVision/django-dask-demo/blob/master/demo/daskmanager/daskmanager.py

我希望能够将任务的保存与提交它的服务器分开,以实现健壮性和可伸缩性。我还想了解有关任务处理状态的更多详细信息,现在即使任务正在处理,未来状态也始终处于待处理状态。粗略估计完成百分比也很棒。

现在,如果Web服务器死了,客户端将被删除,任务将停止,因为没有客户端仍然持有未来。我可以通过使用fire_and_forget解决这个问题,但是当它完成时我无法保存任务状态和结果。

我看到如何跟踪状态并在fire_and_forget之后保存结果:

  1. 我可以有一个调度程序插件,将所有传输发送到AMPQ服务器(RabbitMQ)。我喜欢健壮性,并且能够订阅调度程序输出的某些消息,并且知道每条消息都将被处理。我不确定如何通过这种方法获得自己的结果。我可以手动将节点添加到每个图的末尾以保存结果,但宁愿让它在幕后。
  2. get_task_stream在单独的服务器上或以某种方式使用它。有了这个,似乎我可能会错过一些消息,如果服务器下降所以似乎是一个更糟糕的选择1。
  3. 其他选择?

实现这一目标的最佳方法是什么?

编辑:刚刚测试过,当提交任务的客户端关闭时,即使调用fire_and_forget,它创建的所有期货也会从处理转移到忘记状态。

dask dask-distributed dask-delayed
1个回答
1
投票

您可能希望查看Dask的协调原语,如Queues和Pub / Sub。我的猜测是将你的期货放入队列可以解决你的问题。

https://docs.dask.org/en/latest/futures.html#coordination-primitives

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