Поместите функцию в поток и дождитесь окончания потока.
Нити Python не могут быть прерваны, кроме как с помощью специального C api.
import time
from threading import Thread
def noInterrupt():
for i in xrange(4):
print i
time.sleep(1)
a = Thread(target=noInterrupt)
a.start()
a.join()
print "done"
0
1
2
3
Traceback (most recent call last):
File "C:\Users\Admin\Desktop\test.py", line 11, in <module>
a.join()
File "C:\Python26\lib\threading.py", line 634, in join
self.__block.wait()
File "C:\Python26\lib\threading.py", line 237, in wait
waiter.acquire()
KeyboardInterrupt
Посмотрите, как прерывание было отложено до тех пор, пока поток не закончится?
Здесь он адаптирован к вашему использованию:
import time
from threading import Thread
def noInterrupt(path, obj):
try:
file = open(path, 'w')
dump(obj, file)
finally:
file.close()
a = Thread(target=noInterrupt, args=(path,obj))
a.start()
a.join()
Достаточно отрывочных комментариев, вот и ответ:
Этого должно хватить, чтобы занять их около часа.
Чтобы прояснить, я предлагаю эти темы, чтобы помочь вам научить своих студентов избегать распространенных ошибок Matlab, включая:
Я согласен с предыдущими ответами, но я бы сказал, что индексирование - это первая и самая важная и сложная концепция в изучении MATLAB. Я видел, как многие программисты на C, начинавшие с MATLAB, просто писали циклы, множество циклов, что-то нелепое вроде
for i=1:10
a(i)=i;
end
вместо простого a = 1: 10;
.
Я бы посоветовал им прочитать о концепциях матричного программирования:
Что касается производительности, я бы добавил, что знание того, как использовать режим ячейки редактора, очень полезно.
MATLAB концептуально в некотором смысле сильно отличается от других языков, о которых вы упомянули:
глобальные
и постоянные
переменные являются статическими
] в Java double
private
и папки @TYPE для определения области видимости varargin
/ varargout
Что касается неожиданных или неинтуитивных функций MATLAB, которые могут вызвать у них путаницу, в этом вопросе есть несколько хороших указателей:
Относительно прохладной экономии времени / эффективности Уловки, у этого другого вопроса есть несколько хороших примеров:
И для нескольких потенциально более сложных тем вы можете обратиться к ответам на этот вопрос:
Теперь о моих 0,02 доллара. Основываясь на типах вопросов, которые я видел наиболее часто задаваемыми по SO, я бы сказал, что вы захотите убедиться, что они хорошо понимают следующие концепции:
А вот некоторые полезные функции, которые уже реализованы в MATLAB, которые могут сэкономить им время и усилия:
Для тех, кто пришел из языков C-семейства, поэлементные операторы являются новыми. Мне потребовалось несколько месяцев, чтобы обнаружить операторы ./
и . *
. До этого я писал для циклов для поэлементных операций. Так что, возможно, на это следует указать.