【问题标题】:How can I get result of Dask compute on a different machine than the one that submitted it?如何在与提交它的机器不同的机器上获得 Dask 计算的结果?
【发布时间】:2019-08-26 01:44:45
【问题描述】:

我在 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】:

    您可能想查看 Dask 的协调原语,例如队列和 Pub/Sub。我的猜测是,将你的未来放入队列中会解决你的问题。

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

    【讨论】:

    • 谢谢,这正是我所需要的。将期货放入队列中,以便客户端可以重新启动并有单独的进程检查队列是否已完成期货。谢谢!
    • Futures 可以存储在类似 redis 存储的地方吗?
    • 未来的关键可能是,任何进程都可以从该关键重新创建未来。这只是一个指针。你仍然需要 Dask 在某个地方把握未来,以确保这些数据得到保留。
    猜你喜欢
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-09
    相关资源
    最近更新 更多