나는 각 반복에서 I (재) 값의 긴 벡터를 계산 루프가 안전합니다.KeyboardInterrupt는 복사 된 데이터
질문 : CTRL + C를 누르면 copy() 함수가 중단되지 않고 last_vec
이 손상되지 않았는지 확인할 수 있습니까?
나는 각 반복에서 I (재) 값의 긴 벡터를 계산 루프가 안전합니다.KeyboardInterrupt는 복사 된 데이터
질문 : CTRL + C를 누르면 copy() 함수가 중단되지 않고 last_vec
이 손상되지 않았는지 확인할 수 있습니까?
중요한 것은 .copy()
이 아니며 이후의 참조 지정 (last_vec =
)입니다.
할당이 CPython에서 원자 적이라고 생각합니다 (즉, 바이트 코드 명령어가 하나 필요합니다).
즉, last_vec
은 이전 반복의 값 또는 현재 반복의 복사 된 값 중 하나를 포함 할 수 있습니다. Ctrl-C를 누르면 새 값의 부분 사본이 포함 된 last_vec
이 될 수 없습니다.
맞습니다. 과제의 원 자성이 중요합니다. (그리고 그것은 원자 적이며, 바이트 코드는 STORE_NAME 명령어입니다.) –
당신은이 finally
블록을 사용하여 복사되어 있는지 확인 수 :
while True:
try:
long_vec = recalculate(long_vec)
except KeyboardInterrupt:
print long_veC# last_vec == long_vec in your example
finally:
# does not make sense, since the program halts after that:
last_vec = long_vec.copy()
Ctrl + C는 파이썬 코드를 깰 수 있습니다. 그래서 이것은'long_vec.copy()'가 파이썬이나 C로 구현되었는지 여부에 달려 있습니다. NumPy의 소스 코드를 보거나 다른 사람이 당신을 대신해서 기다려야합니다. :) –
@SvenMarnach : :) 저는 C 언어로 믿습니다. 그러나 모든 것이 파이썬으로되어있는 최악의 일반적인 경우를 생각해 봅시다. –