Logger - класс для логирования и вывода текста в консоль.
Logger is a class for logging and outputting text to the console.
Может использоваться как в распараллеленном коде, так и в обычном. В распараллеленном коде сразу после объявлений любых parallel pool нужно вызвать инициализацию на них через setupOnWorkers (см.ниже).
It can be used both in parallelized code and in regular code. In the parallelized code, immediately after declaring any parallel pools, initialization must be called on them via setupOnWorkers (see below).
Автоматически выбирает глубину отступа в зависимости от глубины вызова. Также глубина отступа может форсироваться при прямой передаче во write.
Automatically selects the indentation depth depending on the depth of the call. The indentation depth can also be formed during direct transfer to write.
dataQueueObj = parallel.pool.DataQueue;
Logger.setLogger(defaultLogPath, dataQueue = dataQueueObj);
Logger.dispLogger();
Logger.write("Запущен проект и инициализован Logger\n");
Как нужно действовать при объявлении распараллеленных операций с логированием.
How to proceed when declaring parallelized logging operations.
Вызвать через setupOnWorkers сразу после инициализации мультипоточности.
Call via setupOnWorkers immediately after multithreading initialization.
...
curPool = parpool("Threads", 8);
Logger.setupOnWorkers(curPool);
Logger.write("Запрос на инициализацию Logger на всех процессах отправлен успешно.")
parfor idx = 1:10
Logger.write(sprintf("Поток %d ", idx));
...
end
Logger.write("Parfor закончился");
Вызвать где-то, но обязательно уже должен существовать parallel pool.
Call the parallel pool somewhere, but it must already exist.
...
Logger.setupOnWorkers(gcp('nocreate'))
Logger.write("Запрос на инициализацию Logger на всех процессах отправлен успешно.")
parfor idx = 1:10
Logger.write(sprintf("Поток %d ", idx));
...
end
Logger.write("Parfor закончился");
Передавать данные руками
Transmit data by hand
...
[defPath, dataQueue] = Logger.getLoggerSettings();
parfor idx = 1:10
Logger.setLogger(defPath, dataQueue);
Logger.write(sprintf("Поток %d ", idx));
...
end
Logger.write("Parfor закончился");