Установка максимального времени работы для функции в Macaulay2
У меня есть функция, которую мне нужно запускать много раз в Macaulay2. Он включает в себя создание случайных объектов и обычно выполняется очень быстро, однако в редких случаях для выполнения одного запуска может потребоваться много времени.
Я пытаюсь ограничить количество времени, которое может длиться каждый прогон, прежде чем сдаться и перейти к следующему. Я использовал Задачи для этого в основном успешно, но у меня странное поведение.
Я создал минимальный пример, чтобы проиллюстрировать это, используя функцию, выполнение которой занимает от (почти) 0 до 2 секунд, но для которой я хочу ограничить время выполнения на 1,5 секунды. Я проверяю, завершено ли выполнение каждого прогона каждые 0,5 с, и запускаю функцию 5 раз, распечатывая результат (то есть, завершен ли прогон в этом примере):
slowFunction=()->(
sleep random(0,2);
return true;
);
cutoffSlowFunction=()->(
task = schedule slowFunction;
for i from 1 to 3 do
{
nanosleep 500000000;
if isReady task then return taskResult task;
};
cancelTask task;
return false;
);
for j from 1 to 5 do
{
result = try cutoffSlowFunction();
print ""; -- STRANGE BEHAVIOUR HERE
print result;
};
Проблема, с которой я столкнулся, заключается в том, что если я удалю строку
error: unhandled return command
Кажется, что пока я что-то здесь печатаю , мой код будет работать. Однако это не идеально, так как удваивает количество печатаемых строк, и я хотел бы это удалить.
Я не уверен, является ли это ошибкой или есть способ обойти такое поведение. Любая помощь приветствуется.