文档帮助中心文档
parfeval
取消排队或运行的未来
取消(F)
例子
取消(F)中的已排队和正在运行的期货停止F.对已完成的期货不采取任何行动。对于每个元素F它还没有进入状态“完成”,函数设置其状态财产“完成”,它的错误属性包含MException表示执行被取消。
取消(F)
F
“完成”
状态
错误
MException
有些功能和操作是无法被中断的Ctrl + C,如保存.当你使用parfeval或parfevalOnAll为了将这些功能和操作卸给工人,取消无法阻止这些未来要停止工作人员执行这些功能和操作,交互式地使用删除函数关闭工作者池。
保存
parfevalOnAll
取消
删除
全部折叠
当你使用parfeval或parfevalOnAll要在后台运行计算,需要创建名为futures的对象。你可以使用状态属性,以确定它是正在运行、排队还是已完成。你也可以用theFevalQueue属性来访问正在运行的和排队的期货。要取消期货,可以使用取消函数。在这个例子中,你:
FevalQueue
使用取消直接取消期货。
检查已完成期货的完成错误。
使用FevalQueue财产访问期货。
将工作添加到队列
创建并行池p有两个工人。
p
p = parpool (2);
使用“local”配置文件启动并行池(parpool)…连接到并行池(工作人员数量:2)。
当你使用parfeval为了在后台运行计算,该函数为每个计算创建一个future并将其添加到池队列中。任务将一直留在队列中,直到一个worker变为空闲。当一个worker空闲时,如果队列不是空的,它就开始计算一个任务。当一个worker完成一个任务时,该任务将从队列中移除,该worker将变为空闲状态。
使用parfeval创建一个期货数组f通过指导工人执行功能暂停.使用1第三个未来,和一个论点正为了所有其他的未来。
f
暂停
1
正
为n = 1:5如果N == 3 f(N) = parfeval(@pause,0,1);其他的f (n) = parfeval (@pause 0正);结束结束
每次使用parfeval返回一个future对象,该对象表示函数在worker上的执行。除了第三个未来,每个未来都需要无限长的时间来计算。未来由parfeval (@pause 0正)是未来的一个极端情况,它会使队列变慢。
parfeval (@pause 0正)
直接取消期货
你可以使用状态取得物业期货的地位。构造每个未来的状态的单元格数组f.
{f。州}
ans =1×5单元{“奔跑”}{“奔跑”}{“排队”}{“排队”}{“排队”}
每一项任务,除了第三个永远停顿。
取消第二个未来直接用取消.
取消(f (2));{f。州}
ans =1×5单元{“奔跑”}{'完成'}{“奔跑”}{“排队”}{“排队”}
当你取消了第二个未来,第三个未来就会运行。等待第三个未来完成,然后再次检查状态。
等待(f (3));{f。州}
ans =1×5单元{“奔跑”}{'完成'}{'完成'}{“奔跑”}{“排队”}
第三个未来现在有了国家“完成”.
检查完成错误
当一个未来完成时,它是状态房地产成为“完成”.要区分已取消的期货和正常完成的期货,请使用错误财产。
流(“f (2): % s \ n”f (2) .Error.message)
f(2):取消对未来的执行。
流(“f (3): % s \ n”f (3) .Error.message)
f (3):
如message属性所示,代码取消了第二个future。第二个未来被取消了,正如消息财产。第三个future完成时没有错误,因此没有错误消息。
消息
取消池队列中的期货
你可以使用FevalQueue属性访问池队列中的期货。
p.FevalQueue
ans = FevalQueue,具有属性:编号排队:1编号运行:2
队列有两个属性:RunningFutures和QueuedFutures.的RunningFutures属性是与当前正在运行的任务对应的期货数组。
RunningFutures
QueuedFutures
disp (p.FevalQueue.RunningFutures)
1 x2 FevalFuture数组:ID状态FinishDateTime功能错误 -------------------------------------------------------- 1 12运行@pause 2 15 @pause运行
的QueuedFutures属性是与当前排队且未运行的任务对应的期货数组。
disp (p.FevalQueue.QueuedFutures)
FevalFuture with properties: ID: 16 Function: @pause CreateDateTime: 15- jule2020 17:29:37 StartDateTime: Running Duration: 0 days 0h 0m 0s状态:queued Error: none
您可以取消单个期货或一组期货。取消所有的期货QueuedFutures.
取消(p.FevalQueue.QueuedFutures);{f。州}
ans =1×5单元{“奔跑”}{'完成'}{'完成'}{“奔跑”}{'完成'}
RunningFutures和QueuedFutures是从最新到最老的排序,不管是否f按最新到最老的顺序排列。每个未来都是独一无二的ID属性的值。检查ID每个期货的财产f.
ID
disp (f)
1x5 FevalFuture array: ID State FinishDateTime Function Error -------------------------------------------------------------- 1 12 running @pause 2 13 finished (unread) 15- jul-2020 17:29:37 @pause Error 3 14 finished (unread) 15- jul-2020 17:29:39 @pause 4 15 running @pause 5 16 finished (unread) 15- jul-2020 17:29:39 @pause Error
将结果与ID性质RunningFutures.
为j = 1:length(p.FevalQueue.RunningFutures) rf = p.FevalQueue.RunningFutures(j);流("p.FevalQueue.RunningFutures(%i): ID = %i\n"、j rf.ID)结束
p.FevalQueue.RunningFutures(1): ID = 12
在这里,RunningFutures是一个数组,包含f (1)和f (4).如果你取消RunningFutures (2),你取消了第四个未来f (4).
f (1)
f (4)
RunningFutures (2)
有时候,future在工作空间中是不可用的,例如,如果您在同一段代码完成之前执行两次,或者如果您使用parfeval在一个函数。您可以取消工作区中不可用的期货。
清晰的f从工作空间。
清晰的f
您可以使用RunningFutures和QueuedFutures去访问尚未完成的期货。使用RunningFutures取消f (4).
rf2 = p.FevalQueue.RunningFutures (2);取消(rf2) rf2。状态
ans = '完成'
要取消队列中仍然存在的所有期货,请使用以下代码。
取消([p.FevalQueue。RunningFuturesp.FevalQueue.QueuedFutures])
多次运行一个函数,直到找到一个满意的结果。在本例中,当结果大于0.95时,期货F数组将被取消。
N = 100;为F(idx) = parfeval(@rand,1);创建一个随机标量结束结果=南;还没有结果。为idx = 1:N [~, thisResult] = fetchNext(F);如果thisResult > 0.95 result = thisResult;拥有了所有需要的结果,所以分手。打破;结束结束%有要求的结果,取消任何剩余的期货取消(F)的结果
平行的。FevalFuture
对象,返回为平行的。FevalFuture,表示执行fcn并保存它的结果。使用fetchOutputs或fetchNext收集结果。
fcn
fetchOutputs
fetchNext
毕竟|afterEach|fetchNext|fetchOutputs|isequal|parfeval|parfevalOnAll
毕竟
afterEach
isequal
您有这个示例的修改版本。您想打开这个示例与您的编辑吗?
你点击一个链接对应于这个MATLAB命令:
通过在MATLAB命令窗口中输入命令来运行命令。Web浏览器不支持MATLAB命令。金宝app
选择一个网站,在那里获得翻译的内容,并看到当地的活动和优惠。根据您的位置,我们建议您选择:.
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。
与当地办事处联系
得到审判现在