У меня проблемы с использованием декоратора @ 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, поэтому, вероятно, есть простое решение, но я рад за любая помощь.