2016-04-11 30 views
0

sınıfının bir yöntemini çalıştırmak istiyorsam Matlab'da iş parçacığı ile toplu iş yürütmek istiyorum. Her iş mevcut bir sınıfı kullanmalı ve yöntemlerinden birini kullanmalıdır. Yapabilirim Parşömensiz çalışırım, ama kelleci ile bir hata alıyorum.Toplu iş işlecini kullanarak Matlab'da toplu iş nasıl çalıştırılır,

parpool olmadan, bu çalışır:

basit bir yöntem ile bir sınıf tanımlayın:

obj = myclass(); 
obj = add(obj,1); 

bu çalışır:

classdef myclass 
    properties 
     prop; 
    end 
    methods 
     % constructor 
     function obj = myclass() 
      obj.prop = 0; 
     end 
     % add function 
     function obj = add(obj,a) 
      obj.prop = obj.prop + a; 
     end 
    end 
end 

bir nesne oluşturmak ve kullanmak fonksiyon. ama aynı şeyi toplu olarak çalıştırmaya çalıştığımda bir hata alıyorum. Burada ne yapıyorum geçerli: toplu

warning unable to calculate the dependencies of the files:
add
because: file, function or class "add" may not exist.

nasıl çalıştırabilir sınıf yöntemleri:

c = parcluster(); 
j = batch(c,@myclass,1,{}); 
wait(j); 
r = fetchOutputs(j); 
obj = r{1}; 
j = batch(c,@add,1,{obj,1}); 

son satır hata veriyor?

cevap

1

anonim işlevinde bir sınıfın bir yöntem olarak belirlenmesi için en sağlam yolu daha açık olduğu gibi bu myclass.add daha iyi çözmek için MATLAB yardımcı

B = batch(c, @obj.add, 1, {1}); 

wait(B) 

%// Re-assign results to obj (see note below) 
obj = fetchOutputs(B); 

nokta işaretini kullanmaktır. Daha önce yazdığınız yol, MATLAB add adlı normal bir işlev arıyor ve bulamıyor. Girdi türlerini dikkate almaz (sizin durumunuzda bunun bir yöntem olduğunu bilmesi gerekir).

Note: batch will make a copy of your object when you pass it as an input. Because of that, you will need to explicitly grab the output and re-assign to obj because the original objwill not be modified in-place.

İlgili konular