我在 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 后保存结果的方法:
我可以有一个调度程序插件,将所有传输发送到 AMPQ 服务器(RabbitMQ)。我喜欢它的健壮性,并且能够订阅调度程序输出的某些消息,并且知道每条消息都会被处理。我不确定如何使用这种方法自行获得结果。我可以手动将一个节点添加到每个图表的末尾以保存结果,但宁愿让它在幕后。
get_task_stream在单独的服务器上或以某种方式使用它。有了这个,如果服务器关闭,我似乎可能会错过一些消息,所以这似乎是一个更糟糕的选择 1。
其他选择?
实现这一目标的最佳方法是什么?
编辑:刚刚测试过,似乎当提交任务的客户端关闭时,它创建的所有期货都从处理转移到遗忘,即使调用 fire_and_forget。