Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在任务完成时获得结果,而不是在Dask中完成所有任务后获得结果?_Dask_Dask Distributed - Fatal编程技术网

如何在任务完成时获得结果,而不是在Dask中完成所有任务后获得结果?

如何在任务完成时获得结果,而不是在Dask中完成所有任务后获得结果?,dask,dask-distributed,Dask,Dask Distributed,我有一个dask数据帧,想计算一些独立的任务。有些任务比其他任务快,但我会在完成更长的任务后得到每个任务的结果 我创建了一个本地客户端,并使用Client.compute发送任务。然后我使用future.result来获得每个任务的结果 我使用线程同时请求结果,并测量每个结果的计算时间,如下所示: def get_结果未来,i: t0=时间 打印计算结果,i result=future.result printresult{}采用了{}.formati,time.time-t0 客户端=客户端

我有一个dask数据帧,想计算一些独立的任务。有些任务比其他任务快,但我会在完成更长的任务后得到每个任务的结果

我创建了一个本地客户端,并使用Client.compute发送任务。然后我使用future.result来获得每个任务的结果

我使用线程同时请求结果,并测量每个结果的计算时间,如下所示:

def get_结果未来,i: t0=时间 打印计算结果,i result=future.result printresult{}采用了{}.formati,time.time-t0 客户端=客户端 df=dd.read_csvpath_to_csv future1=客户端.computedf[df.x>200] future2=客户端.computedf[df.x>500] threading.Threadtarget=get_result,args=[future1,1].start threading.Threadtarget=get_result,args=[future2,2].start 我希望上述代码的输出类似于:

calculating result 1
calculating result 2
result 2 took 10
result 1 took 46
因为第一个任务更大

但我却同时得到了这两个

calculating result 1
calculating result 2
result 2 took 46.3046760559082
result 1 took 46.477620363235474
我认为这是因为future2实际上是在后台计算,并在future1之前完成,但它要等到future1完成后才能返回


有什么方法可以在future2完成时获得结果吗?

您不需要让线程以异步方式使用future2-它们本来就是异步的,并且在后台监视它们的状态。如果您想按结果准备好的顺序获得结果,那么应该使用

但是,对于您的特定情况,您可能只需要查看仪表板或使用df.visualize来了解正在进行的计算。这两种未来都依赖于读取CSV,这一项任务在任何一项任务运行之前都是必需的,并且可能需要绝大多数时间。如果不扫描所有数据,Dask不知道哪些行的x值是多少