[혼공파] # 7. 모듈

문연수·2023년 1월 19일
0

혼공파

목록 보기
7/8

1. 표준 모듈

- 1. 모듈 불러오기

다음 중 모듈을 제대로 읽어 들이지 못하는 코드는?

import sin, cos, tan from math

서순 오류

- 2. 다양한 모듈 찾아보기

번호모듈 이름모듈 기능
0wave 모듈wav 음악 형식과 관련된 처리를 할 때 사용합니다.
1curses 모듈curses 라이브러리는 텍스트 기반 터미널을 위한 독립적인 스크린 페인팅과 키보드 처리 기능을 제공합니다.
2socket 모듈이 모듈은 BSD socket 인터페이스에 대한 액세스를 제공합니다.
3magic 모듈python-magic 은 파일 타입 식별 라이브러리인 libmagic 의 파이썬 인터페이스입니다.
4pdb 모듈pdb 모듈은 파이썬 프로그램을 위한 대화형 소스 코드 디버거를 정의합니다.

출처: https://docs.python.org/ko/3.8/howto/curses.html
출처: https://docs.python.org/ko/3/library/socket.html
출처: https://pypi.org/project/python-magic/
출처: https://docs.python.org/ko/3.7/library/pdb.html

- 3. os 모듈 사용해보기

# 모듈을 읽어 들입니다.
import os

# 디렉토리를 읽어 들이는 함수
def read_directory(path, level):
	# 디렉토리의 요소 읽어 들이기
	print("\t" * level + "현재 디렉토리:", path)
	dirent_list = os.listdir(path)
	
	# 디렉토리의 요소 구분하기
	for dirent in dirent_list:
		if (dirent.startswith('.')):
			continue

		full_path = os.path.join(path, dirent)

		if (os.path.isdir(full_path)):
			read_directory(full_path, level + 1)
		else:
			print("\t" * level + "- 파일:", dirent)
			
read_directory(".", 0)

내가 이 짬에 이런 코드를 짜야 하나 싶고... 막 그러네

2. 외부 모듈

- 1. python prime module

from primePy import primes

print(primes.between(100, 1000))

- 2. 자신의 분야에서 사용되는 모듈

 임베디드에서 파이썬은 완전히 대척점에 있는 언어라서 실제로 사용할 일이 많진 않지만 유저-장치 간 통신에서는 꽤나 요긴하게 썼던 경험이 있다. 특히 socketserver 라이브러리는 클라이언트 용 애플리케이션으로 포워딩할때 도움이 되었다.

3. 모듈 만들기

- 1. 자신의 분야에서 사용하는 모듈 분석하기

 앞 장에서 살펴본 socketserver 모듈을 분석하는 것이 과제이다.

 책에서는 pip 를 통해 설치 경로를 파악하고 해당 파일을 열어서 분석하는 방법을 소개하나, 필자는 nvimCoC (coc-pyright) 를 통해 파일을 열어 접근한 뒤 분석하려 한다.

세줄 요약:

  1. socketserver 라이브러리는 synchronous 하게 설계되어 있다. 여기에서는 synchrounous 라는 용어보단 실제론 blocking 이라는 용어가 더 올바른 것 같다. 물론 이는 시스템 콜 관점에서 그렇다는 것이고 라이브러리의 추상적 개념성 위에서는 synchrounous 라는 용어도 쓸 수 있을 것 같다만..
  2. 5개의 클래스는 위에서 보이는 아스키 아트로 표현한 다이어그램과 같은 상속 관계를 가진다. 좌측의 TCPServer 그리고 UDPServer 클래스는 IP 계층에서 동작하고 우측의 UnixStreamServerUnixDatagramServerUNIX Domain Socket 을 사용하게 된다.
  3. 여기에 Mix-in class 를 활용하여 multiple requests 에 대한 처리 방식을 택할 수 있는데, ForkingMixIn 을 택하게 되면 요청-대-프로세스 구조를 가지게 되며, ThreadingMixIn 을 택하게 되면 요청-대-쓰레드 구조를 택하게 된다.

This is bad class design, but saves some typing. (딱 이 수준 ㅋ)

profile
2000.11.30

0개의 댓글