我在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,它创建的所有期货也都从处理转移到了遗忘。
答案 0 :(得分:1)
您可能想看一下Dask的协调基数,例如Queues和Pub / Sub。我的猜测是,将您的期货放入队列可以解决您的问题。
https://docs.dask.org/en/latest/futures.html#coordination-primitives