@fork декоратор с try / исключением на разных платформах, не выполняется, кроме пункта - PullRequest
0 голосов
/ 23 апреля 2020

У меня проблемы с использованием декоратора @ fork с предложением try & исключением. На SageMathCell фрагмент кода работает нормально, тогда как на Jupyter и CoCal c он не вызывает корректное предложение исключения. На CoCal c сначала он вообще не распознавал декоратор @ fork , но from sage.all import * (идея из вопроса: @ декоратор форка не распознается в скрипте ) help.

Кусок кода:

from sage.all import * #for CoCalc

a_0,a_1 = var('a_0,a_1');s = [a_0,a_1]
equations = [69*a_0 + 4556 == 69*a_0 + 63*a_1, 69*a_1 - 3350 == -67*a_0 + 57*a_1, 63*a_0 - 3876 == -1542, 63*a_1 + 2850 == 7406]

try:
    @fork(timeout=0.1, verbose=True) #use e.g. 0.1 and 10
    def DirectSolution():
        sage_solution = solve(equations, s , solution_dict=True)
        print('Solves in time ,','sage_solution:',sage_solution)
        return sage_solution
    sage_solution = DirectSolution()[0]

except KeyboardInterrupt:
    sage_solution = []
    print('Takes too long , ','sage_solution:',sage_solution)

print('Execute the rest of the code, ','sage_solution:',sage_solution)

Запуск декоратора @fork без попытки / за исключением 0,1 секунды, я получил ошибку KeyboardInterrupt, поэтому я использовал его в исключении. Разве это исключение обычно не «вызывается, когда пользователь нажимает клавишу прерывания»?

  • Как упоминалось выше, в SageMathCell код работает так, как задумано: код в SageMathCell

    За 10 секунд он вычисляет решение и распечатывает текст. В течение 0,1 секунды он устанавливает sage_solution = [] и печатает текст.

  • Однако и на Jupyter, и на CoCal c он не использует исключение должным образом в течение 0,1 секунды. Я получаю следующее сообщение:

    Killing subprocess 1346 with input ((), {}) which took too long

    Execute the rest of the code, sage_solution: N

    То есть не выполнено условие исключений:

    sage_solution = []

    print('Takes too long , ','sage_solution:',sage_solution)

Я не уверен, что искать здесь, потому что он работает на одной платформе. Простой пример try / кроме работал нормально ( 1-й пример ). Другая идея заключалась в том, что KeyboardInterrupt может быть проблемой, но ее удаление ничего не изменило.

Я новичок в Sage / Python, поэтому, вероятно, есть простое решение, но я рад за любая помощь.

...