主要内容

使用afterEach毕竟跑回调函数

您创建一个未来当你在后台运行功能或平行池使用parfeval,parfevalOnAll,afterEach,或毕竟。您可以使用afterEach毕竟自动运行一个或多个后一个回调函数未来对象完成。

  • 如果你使用afterEach,MATLAB®运行后的回调函数未来对象完成。如果未来数组元素,MATLAB客户机运行时回调函数次了。

  • 如果你使用afterEach毕竟,MATLAB运行回调函数未来对象完成。如果未来数组元素,MATLAB客户机运行时回调函数只运行一次。

调用afterEachparfeval计算

您可以使用afterEach自动调用功能的结果parfeval计算。

使用parfeval计算随机向量的工人。默认首选项,parfeval创建一个parpool如果没有一个已经创建自动。

idx = 1:10 f (idx) = parfeval (@rand, 1000,1);结束

显示每个向量中的最大元素后创建的。afterEach执行这个函数处理每个未来的输出当他们准备好了。

afterEach (f, @ (r) disp (max (r)), 0);
0.9975 0.9990 0.9982 0.9991 0.9982 0.9998 0.9999 0.9986 0.9996 0.9990

调用毕竟parfeval计算

您可以使用毕竟自动调用函数的输出相结合parfeval计算。

使用parfeval计算随机向量的工人。默认首选项,parfeval创建一个parpool如果没有一个已经创建自动。

idx = 1:10 f (idx) = parfeval (@rand, 1000,1);结束

显示的最大元素在所有这些向量后创建的。毕竟执行这个函数处理组合输出的所有期货当他们都准备好了。

毕竟(f, @ (r) disp (max (r)), 0);
0.9998

结合afterEach毕竟

您可以组合afterEach毕竟自动调用更多的功能在未来的结果。这两个afterEach毕竟生成未来可以再次使用的变量afterEach毕竟

使用parfeval计算随机向量的工人。默认首选项,parfeval创建一个parpool如果没有一个已经创建自动。

idx = 1:10 f (idx) = parfeval (@rand, 1000,1);结束
开始平行池(parpool)使用“本地”概要文件…连接到8工人。

计算每个向量中的最大元素当他们准备好了。afterEach执行这个函数处理每个未来的输出当他们成为准备好并创建另一个未来的结果。

maxFuture = afterEach (f, @ (r)马克斯(r), 1);

计算它们之间的最小值,调用毕竟在这个新的未来。毕竟执行一个函数的输出参数所有期货后完成。在这种情况下,毕竟执行的函数最小值的输出maxFuture在完成并创建另一个未来的结果。

minFuture =毕竟(maxFuture @ (r)分钟(r), 1);

你可以获取结果使用fetchOutputsfetchOutput等到未来完成收集结果。

fetchOutputs (minFuture)
ans = 0.9973

你可以检查的结果afterEach通过调用fetchOutputs在其未来的变量。

fetchOutputs (maxFuture)
ans =10×10.9996 0.9989 0.9994 0.9973 1.0000 1.0000 0.9989 0.9994 0.9998 0.9999

使用异步更新用户界面afterEach毕竟

这个例子展示了如何更新用户界面计算完成。当你卸下计算工人使用parfeval,所有用户界面响应,而工人执行这些计算。在本例中,您使用waitbar创建一个简单的用户界面。

  • 使用afterEach每次计算完成后更新用户界面。

  • 使用毕竟计算完成后更新用户界面。

使用waitbar要创建一个图处理,h。当你使用afterEach毕竟,waitbar图处理功能更新。关于处理对象的更多信息,请参阅处理对象的行为

h = waitbar (0,“等……”);

使用parfeval计算随机矩阵的特征值的实部。默认首选项,parfeval创建一个平行池自动如果不是已经创建。

idx = 1:10 0 f (idx) = parfeval (@ (n)真实(eig (randn (n))), 1、5 e2);结束

您可以使用afterEach自动调用功能的结果parfeval计算。使用afterEach最大的值来计算后输出数组的每个未来完成。

maxFuture = afterEach (f @max 1);

您可以使用状态财产获得期货的状态。创建一个逻辑数组的地方状态房地产的期货f“完成”。使用的意思是计算完成期货的分数。然后,创建一个匿名函数updateWaitbar。函数部分等栏的长度变化h的分数完成期货。

updateWaitbar = @ (~) waitbar(平均({f。州}= =“完成”),h);

使用afterEachupdateWaitbar更新后的分数等杆长每一个未来maxFuture完成。使用毕竟删除关闭后等待酒吧所有的计算都是完整的。

updateWaitbarFutures = afterEach (f updateWaitbar 0);毕竟(updateWaitbarFutures @(~)删除(h), 0);

使用毕竟柱状图显示结果的柱状图maxFuture毕竟期货完成。

showsHistogramFuture =毕竟(maxFuture @histogram 0);

在未来的变量处理错误

当计算未来的变量导致一个错误,在默认情况下,afterEach不评价其功能的元素失败了。如果你想处理任何错误,例如,你有一个你想要更新的用户界面,您可以使用名称-值对PassFuture。当设置为真正的,未来变量传递给回调函数。你可以叫fetchOutputs,过程的输出,并处理任何可能的错误。

给工人使用计算parfeval。默认首选项,parfeval创建一个parpool如果没有一个已经创建自动。如果你的parfeval计算结果的误差,未来变量错误,和它的错误属性反映了它。

errorFuture = parfeval (@ (n) randn (n), 0, 0.5);等待(errorFuture);errorFuture.Error
ans = ParallelException属性:标识符:“MATLAB: NonIntegerInput”的信息:“大小的输入必须是整数。因为:{}remotecause: {[1×1 MException]}栈:[1×1 struct]

如果你使用afterEach在未来,回调函数中不涉及那些错误的元素在未来。在下面的代码中,对话框不是因为未来执行错误。

afterEach (errorFuture @()对话框(“操作完成”),0);

处理期货,导致错误,使用名称-值对PassFuture当调用afterEach。未来变量传递给回调函数,而不是它的输出。调用fetchOutputs对未来的变量,其输出和过程。如果未来导致一个错误,fetchOutputs抛出一个错误,您可以捕获和处理。下面的代码显示了一个错误对话框。

afterEach (errorFuture @handleError 0,“PassFuture”,真正的);

函数handleError (f)试一试输出= fetchOutputs (f);%做一些与输出errordlg (“操作失败”);结束结束