`parfor` doesn't seem to work with Python lists
    4 views (last 30 days)
  
       Show older comments
    
    Hagai Hargil
 on 10 Oct 2016
  
    
    
    
    
    Commented: Robert Snoeberger
    
 on 12 Oct 2016
            Hellp everyone,
I'm trying to use a parfor loop that includes a Python list as an input argument to a class array:
 allEvents(1:size(hexData, 2), 1) = Event(); 
 parfor n = 1:size(hexData, 2)
      allEvents(n) = createSingleEvent(hexData{n}, dataFormat, range, hexToBinMap);
 end
where hexData{n} is the mentioned Python list, and allEvents is a preallocated array of class Event() (value class, not handle).
Unfortunately, no matter how I turn it, the parfor loop won't run. Needless to say, a regular for loop compiles properly.
The error I receive is a "Python error: Index exceeds list dimensions". When I manually check possibly-problematic indices I recieve no such error.
By adding a "char(hexData{n})" inside the parfor I receive "Index exceeds matrix dimensions" in the first occasion inside the function where I need to use the hexData{n} value, even if I see that the index definitely exists in that variable:
 startOfString = hexDataAsChar(1); % This errors out
Only when I erase all traces that hexData was ever a Python list does MATLAB kindly allows me to parfor this loop.
Any help will be deeply appreciated. Thanks!
0 Comments
Accepted Answer
  Robert Snoeberger
    
 on 11 Oct 2016
        If you are using a parpool, then parfor needs to save and load the Python list. Saving (serializing) Python objects into a MAT-file is listed as a limitation .
2 Comments
  Robert Snoeberger
    
 on 12 Oct 2016
				Unfortunately, I'm not aware of a workaround.
The only idea that I can think of is to wrap the Python object in your own MATLAB class with customized save and load . You might be able to use pickle to do the serialization. I haven't tried it so I don't know if the idea is viable.
More Answers (0)
See Also
Categories
				Find more on Parallel for-Loops (parfor) in Help Center and File Exchange
			
	Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
