한참 헤매면서 구글링을 하며 글을 읽다가 4번째 Refernce의 글을 읽으며 공부를 어떻게 하면 좋을지, 그리고 글을 어떻게 쓰면 좋을지에 대한 구상이 끝나게 되었다. 잘 정리해보자.
기본으로 돌아가서..
루틴은 아마도 운동을 좋아하는 사람들이 잘 아는 단어이지 싶다. 운동할 때 규칙적으로 하는 일과라고 알고 있었는데 간단히 검색을 해보니 이런 뜻이더라..
즉, 단순하게 xx.py
파일을 만들어놓고, 거기에 함수든 for문이든 명령을 수행하는 무언가를 써놓고 xx.py
를 실행시키는 것, 혹은 그 파일 자체를 루틴이라 할 수 있을 것이다.
그렇다면..
메인루틴(정의하지는 않았지만 그냥 루틴이다.)에서 호출시 실행되는 함수라 말할 수 있다. 예시를 하나 들어서 설명해보자. 실행하는 각각의 함수명에는 무엇을 의미하는지 적어놓았다.
def Subroutine():
print("Run Subroutine & result = 1")
return 1
def Mainroutine():
print("Run Mainroutine")
Subroutine_result = Subroutine()
Subroutine_result += 5
print("Mainroutine end")
return Subroutine_result
print(Mainroutine())
그리고 이 코드가 작동한 결과를 살펴보면
Run Mainroutine
Run Subroutine & result = 1
Mainroutine end
6
이라는 결과가 나온다. 그리고 이 구조는 스택의 과정과 완전히 일치한다는 것이고, 따라서 서브루틴의 실행과정은 스택의 변화와 동일하다고 말할 수 있다.
(0: Mainroutine
함수 실행 --> 1: Subroutine
함수 실행 및 종료 --> 0: Mainroutine
함수 종료)
마지막으로..
접미사 Co-
의 의미를 대강 생각해보자. '함께'라는 뜻이 있을텐데 각각의 함수가 서로의 작업을 하는 것을 생각해보면 하나의 스레드를 나눠서 함수를 쓴다는 것이라 해석하면 될 것이다.(그러니까 인생은 혼자란건가?)
이에 대한 자세한 설명은 스레드와 같이 할 필요가 있어보인다. 이게 왜 필요한지 그 필요성에 대한 것이 꽤 중요한 내용이어 보이기에 다음 글에서 자세하게 소개해볼 예정이다.
공부를 해본 결과 코루틴과 asyncio
를 완전 잘못 이해한 체로 코드를 짜고 있었다..
asyncio
를 통해 코루틴을 사용할 때는 create_task
를 사용해야 코루틴이 정상 작동한다고 한다. 결과적으로 asyncio.sleep
을 생으로 가져다박으면 (물론 작동은 하지만) Thread
를 사용하는 것과 별다른 차이가 없게 된다.
우선 기본알람의 코드구조를 좀 바꿔놓았고, 이거는 Coroutine
의 작동원리와 같이 잘 돌아갈 것이다. 문제는 반복알람인데... 충분히 쪼개도 복잡한게 참 큰 문제다...ㅋㅋㅋ...
오 디스코드봇 짜시면서 작성하셨구나.. 전 요즘 디스코드봇 살짝손대다 그냥 이론 다시 적립하고 나중에 만드려고하는데ㅋㅋ