Local parpool cannot initiate following specific command in startup.m

4 次查看(过去 30 天)
I'm running MATLAB R2018b on windows 10. I use the typical startup.m file to set some fairly innocuous groot properties and add some folders containing general tools to the MATLAB path.
Recently, I've included a small script that allows me to add additional folders to the path, depending on which project I am working on. It looks something like this:
% Add other folders to path, depending on project
fprintf('What are you working on?\n')
fprintf('\t1: Project 1.\n')
fprintf('\t2: Project 2.\n')
switch input('')
case 1
addpath(genpath('***Path1***'))
case 2
addpath(genpath('***Path2***'))
otherwise % do nothing
end
The issue is, when I include this script in the startup.m file, I am unable to start a parpool using the 'local' profile - the cluster validation tool gets hung up on the "Job Test (createJob)" step. But, I have no issues if I run this script outside of the startup.m file (i.e., after initialization of the MATLAB instance). I realize that this solves the problem, but I'm curious as to why I can't run the script from within the startup.m file. Does anybody have any comments?
For what it's worth, when I halt the call to parpool that gets hung, I get:
Operation terminated by user during
parallel.internal.getJavaFutureResult (line 15)
In parallel.internal.pool.InteractiveClient/waitForSessionCreation (line
647)
sessionFuture, 1,
java.util.concurrent.TimeUnit.SECONDS);
In parallel.internal.pool.InteractiveClient/start (line 354)
obj.Session =
obj.waitForSessionCreation(sessionFuture,
connectionCounter, ...
In parallel.Pool>iStartClient (line 796)
spmdInitialized = client.start(poolType , numWorkers, cluster, ...
In parallel.Pool.hBuildPool (line 585)
iStartClient(client, 'pool', cluster, guiMode,
supportRestart, argsList);
In parallel.internal.pool.doParpool (line 18)
pool = parallel.Pool.hBuildPool(constructorArgs{:});
In parpool (line 98)
pool = parallel.internal.pool.doParpool(varargin{:});

采纳的回答

Thomas Falch
Thomas Falch 2019-9-12
The MATLAB workers of the parallel pool will also execute the startup.m script. Since this script contains input(), all the workers will block forever, waiting for input. However, since these workers run in the background, without a GUI, it is not possible to give them any input, and the parpool will simply fail to start.
To avoid this problem make sure your startup.m does not contain any commands like input() which will block, waiting for the user.

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Startup and Shutdown 的更多信息

产品


版本

R2018b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by