Установка максимального времени работы для функции в 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

Кажется, что пока я что-то здесь печатаю , мой код будет работать. Однако это не идеально, так как удваивает количество печатаемых строк, и я хотел бы это удалить.

Я не уверен, является ли это ошибкой или есть способ обойти такое поведение. Любая помощь приветствуется.

0 ответов

Другие вопросы по тегам