我想做这样的事情:
client = Client()
def sub():
client.submit(lambda: 'ok')
调用sub()
不会提交任务。直接调用client.submit(lambda: 'ok')
。我在说明此行为的文档中找不到任何内容。 (我使用的是Dask 1.1.4版,目前无法升级)
我在执行sub()
时也提交了任务,但是刷新GUI后,我在Dask GUI中看不到这一点。您可以检查是否可以正常工作
def sub():
return client.submit(lambda: 'ok')
sub().result()
# 'ok'
在您的原始代码中,由submit
生成的Future未存储在变量中,并且在函数sub
完成后没有对其的引用。因此,Dask将注意到,在那个将来,不再有客户对它感兴趣,它将从系统中清除掉-可能它已经在运行,并且结果的内存将被释放。
这是预期的行为,在您的代码中确定哪些期货引用了它们,这是管理系统内存的基本概念,请参阅https://distributed.dask.org/en/latest/memory.html#clearing-data
[我怀疑当您最初不在函数中调用submit
时,您的repl保留了对结果的引用-如果您在行的末尾添加了;
以抑制输出,则您将看到了与调用sub
相同的行为。