У меня есть дорогая функция
mainfunc:{[batch;savepath]
...compute large table depending on batch and save it to savepath...
}
, которая копируется в подчиненные процессы , и каждый процесс обрабатывает различные batch
входные данные для функции.
Скажем, мне нужновыполнить функцию на input:til 1000
, затем процесс 1 выполнит mainfunc[input[til 50];savepath]
, а процесс 2 выполнит mainfunc[input[50+til 50]]
.Поскольку они являются процессами, а не потоками, сохранение в файл возможно.
Причина, по которой я стараюсь избегать потоков, заключается в том, что вывод из mainfunc
представляет собой большую таблицу, и если при сериализации будет много накладных расходов,таблица была отправлена в основной процесс и оттуда сохранена.
Теперь я сталкиваюсь с ограничением, которое я хочу выводить на экран большой таблицы в каждом процессе.Однако для отображения (в случае таблицы с символами) необходимо изменить файл sym
, сохраняемый для перечисления, и я получаю исключение, как только 2 процесса пытаются получить доступ к этому файлу sym
.Я использую что-то вроде
splaydirname set .Q.en[hsym `$savepath] largetable; / .Q.en locks the sym file enumeration is done
Как обойти это?
Спасибо за помощь