我怎么能监听完成工作吗?
18视图(30天)
显示旧的评论
我使用一个非常大而复杂的GUI,用于处理成百上千的文件。可以独立处理很多文件,每个文件可能需要几分钟的过程,使它们非常适合并行处理。
我想更新GUI每当文件进行处理。得到结果并行处理的标准方式是使用fetchOutputs或fetchNext。然而,这些功能块的延续,从而干扰我的与GUI交互能力。
在我看来,这样做最好的方法是简单地倾听每个工作,完成任务,或者未来。然而,只ObjectBeingDestroyed事件似乎这些对象。他们有一个国有资产可以用来确定他们是否已经完成,但是这个属性不是SetObservable。
我可以调查国有资产(或调查fetchNext超时)使用一个循环或定时器并通知时‘完成’,但我认为将很难管理,并在MATLAB端占用的资源。
那么有什么办法可以监听完成工作吗?
0评论
答案(4)
莱昂内尔
2018年1月9日
好吧,看来我发现答案使用函数包含在2017版本。
%首先定义一个平行的池
poolobj = parpool (“本地”1);
%,然后创建一个数据队列
q = parallel.pool.DataQueue;
%,队列创建一个监听器
侦听器= afterEach (q, @testevent);
%,开始数据处理(注意,必须通过队列)
f = parfeval (@testfun 0数据,q);
函数testfun必须接受队列作为参数和触发事件通过发送:
函数问testfun(数据)
%处理数据
发送(q, dataprocessed)
结束
一旦发回的数据,它触发函数testevent和数据作为参数给出:
函数testevent (dataprocessed)
%执行一些操作
一个可以使用这个与本地工作区和处理来存储结果直接进入工作区。要做到这一点,取代线:
侦听器= afterEach (q, @testevent);
由:
侦听器= afterEach (q, makeListenerHandle (someHandle));
在函数makeListenerHandle生成一个处理一个嵌套的函数:
函数functionHandle = makeListenerHandle (handleStructure)
functionHandle = @LocalFunction;
函数LocalFunction (dataprocessed)
handleStructure。dataprocessed = dataprocessed;
结束
结束
我做了一些脚本和工作在2017版本,使用windows 10。
Edric埃利斯
2017年1月27日
不幸的是,目前还没有办法的事件通知
parallel.Future
返回的对象
parfeval
。
在某些情况下(即只
乔丹
集群类型)
是
各种回调:
//www.tianjin-qmedu.com/help/distcomp/apply-callbacks-to-mjs-jobs-and-tasks.html
。