Jupyter Notebook Lab에서 [ ] 안의 숫자 또는 *의 의미

2 분 소요

한국방송통신대학교 프라임칼리지 파이썬 튜터링 질의응답 중 다른 분들도 많이 궁금해하실 만한 중요한 내용에 대해 공유해보려고 합니다.

질문은 다음과 같습니다.

jupyterlab을 사용하다가
좌측의 [  ] 행 번호 나타내는 것에서요..
[1] a = b + c
[2] r = a * a
[3] print (a)

이렇게 잘 되다가
행 위아래로 움직이던가 어떻게 하다보면
종종 [*] 이렇게 되고서는

그 다음부터는 새로운 행을 만들어서 코드를 입력해도
전혀 반응이 없고 새로운 번호가 부여되지도 않습니다.
그래서, 화일 닫고 새로 시작하는데요...  --;
이 문제의 원인과 해결 방법이 무엇인지 궁금합니다. 

이번 포스팅에서는 이에 대한 답변을 다뤄보도록 하겠습니다.

답변 1: [ ] 안의 숫자는 무엇인가?

한줄요약: Cell 수행 차수를 의미합니다. 

ipynb 파일은 셀 실행 순서에 따라 다음 수행할 cell의 출력결과가 바뀔 수 있다.

jupyter lab은 브라우저를 기반으로 Interactive하게 작업할 수 있는 환경입니다. 이미 컴파일된 결과물을 컴퓨터가 실행하는 환경과는 다르게 jupyter lab과 같은 환경에서는 Cell을 실행하는 순서에 따라 다음 수행할 Cell의 결과가 달라질 수 있습니다.

예를 들어 다음 두 그림은 똑같은 ipynb 파일에서 Cell 을 수행해본 결과이나, 수행 순서만 바꾸어본 것입니다.

Imgur

순서대로 실행하면 두 번째 셀에서 tmp 에 덮어쓴 값이 출력됨

Imgur

두 번째, 첫 번째, 세 번째 순서대로 셀을 실행하면 가장 최근에 tmp에 값을 덮어쓴, 즉 첫번째 셀에서 덮어 쓴 값이 출력됨

프로그래머는 [ ] 안의 숫자를 보고 셀 수행 순서를 복기해가며 프로그래밍 할 수 있다.

셀 실행 순서는 셀 왼쪽의 대괄호 안에 기록됩니다. 셀 순차적으로 실행하지 않고 임의의 순서대로 한 경우, 프로그래머는 대괄호 안에 기록된 숫자를 보고 자신의 셀 수행 순서를 트레이싱 할 수 있습니다.

C 언어 등의 컴파일 환경에서는 이러한 트레이싱을 유저가 직접할 필요가 전혀 없으나,

Jupyter Lab과 같이 어떠한 셀을 먼저 실행할지 유저가 직접 선택할 수 있는 환경에서는

종종 이러한 트레이싱 기능이 필요한 때가 있습니다.

다음 예제가 그러한 경우입니다.

중간고사 대체과제물을 예제로 들자면, 제출 전까지는 편의대로 셀 수행 순서를 마구 조정하며 프로그래밍해도 문제가없습니다.
그러나 최종적으로는 채점자가 순차적으로 cell 수행을 했을 때 원하는 결과가 도출이 되어야 합니다. (출제자의 요구사항이라고 가정하겠습니다.)

그러니 최종 결과물인 ipynb을 제출할때에는 대괄호 안의 숫자를 참조해가며 Cell 배치를 다시 조정하여 
채점자가 순차적으로 cell을 수행해가며 채점할 수 있게끔 만들어야합니다.  

답변 2: [ ] 안의 별표는 무엇인가?

한줄요약: 수행이 끝나지 않은 셀은 별표가 표시된다.

현재 실행 중인 cell은 숫자가 아닌 별표로 표시됩니다. 매우 짧은 시간내에 처리되는 셀들은 수행되는 과정이 너무 짧아 별표를 확인하지 못하셨을 수도 있습니다. 그러나 긴 처리를 요하는 반복문이 포함된 셀의 경우, 수행이 끝나지 않으면 별표를 보실 수 있습니다.

만약 별표를 확인 중이시라면, 연산이 끝나지 않았기 때문입니다..

예를 들어 다음과 같은 셀의 경우 저도 별표가 꽤 오랜시간 사라지지 않습니다.

for i in range(10000):
	for j in range(10000):
		for k in range(10000):
			tmp = i*j*k

다음과 같은 셀은 무한루프가 발생한 경우 셀을 강제 종료하지 않는다면 별표가 사라지지 않습니다.

while(True):
	tmp = 1

답변 3: 별표 떴을 때 해결 방안은?

한줄요약: 대기하시거나, 셀을 강제종료하시거나, 커널을 다시시작하시면 됩니다.

해결책 1

만약 연산이 너무 긴 셀인 경우는 결과가 나올 때 까지 조금 기다려보기시 바랍니다.

해결책 2

그렇게 연산이 많이 필요한 셀이 아닌데 지나치게 별표가 오래간다면 무한루프 등의 문제가 있는 코드일 수 있습니다.

이 경우에는 셀을 강제 중지하신 뒤 셀을 수정하여 다시 수행하여 보시는 것을 추천드립니다.

Imgur

강제 종료의 경우 아래 그림같이 네모버튼을 눌러주시면, 현재 수행되고 있는 셀이 종료됩니다.

Imgur

이때 발생하는 에러는 사용자의 지시 (keyboard interrupt)에 의해 정지되었다는 뜻이니 신경 안쓰셔도 됩니다.

해결책 3

셀 하나가 문제가 아니라 아예 셀 수행 이력을 전부 없애고싶으신 경우는, 물론 주피터 랩을 재실행하실 수도 있으나

다음과 같이 커널 재시작을 하는 방법도 있습니다.

Imgur

어떠한 파일을 닫고 다시 실행할 필요 없이 작업내역을 지우고 재시작할 수 있습니다.

셀 수행을 강제로 종료하지 않는 이상 주피터는 셀이 연산을 모두 마칠때까지 대기합니다.

따라서 새로운 셀을 만들어 코드를 입력한 후 실행해도 이전에 수행된 셀이 종료될때까지는 반응하지 않습니다.

카테고리:

업데이트: