使用afterEach
和毕竟
跑回调函数
您创建一个未来
当你在后台运行功能或平行池使用parfeval
,parfevalOnAll
,afterEach
,或毕竟
。您可以使用afterEach
和毕竟
自动运行一个或多个后一个回调函数未来
对象完成。
如果你使用
afterEach
,MATLAB®运行后的回调函数未来
对象完成。如果未来
数组米
元素,MATLAB客户机运行时回调函数米
次了。如果你使用
afterEach
毕竟,MATLAB运行回调函数未来
对象完成。如果未来
数组米
元素,MATLAB客户机运行时回调函数只运行一次。
调用afterEach
在parfeval
计算
您可以使用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);
你可以获取结果使用fetchOutputs
。fetchOutput
等到未来完成收集结果。
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);
使用afterEach
和updateWaitbar
更新后的分数等杆长每一个未来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 (“操作失败”);结束结束