qcoding

[서평이벤트 당첨_이지스퍼블리싱] 점프투 파이썬_라이브러리 예제편 본문

시계열분석_python

[서평이벤트 당첨_이지스퍼블리싱] 점프투 파이썬_라이브러리 예제편

Qcoding 2022. 5. 27. 09:27
반응형

안녕하세요!

 

이지스퍼블리싱에서 시행하는 서평이벤트에 당첨되어 "점프투 파이썬 라이브러리" 책을 받아 학습해보고 남기는

 

후기입니다!

1) Do it 시리즈 소개

-> 저는 Do it 시리즈 책을 3권정도 보유하고 있는데요. 구매를 하고 한참뒤에 네이버 스터디룸이 있는 것을 알게 되었습니다. 여기 카페에서는 자기주도 학습을 지원하기 위해서 책을 구매한후 공부단 을 등록하면 자신이 세운 계획을 스스로 잘 이수하고 인증을 한 완독자에 한하여 학습의 연장을 위해 책을 선물하는 지원프로그램을 수행하고 있습니다.

혼자서 공부를 할 경우에는 의지가 떨어지고 자신과의 약속을 지키기 어려운데 이지스퍼블리싱에서 지원하는 지원프로그램을 통해 학습도 하고 책도 선물받는 좋은 기회인 것 같습니다!!

https://cafe.naver.com/doitstudyroom

 

Do it! 스터디룸 : 네이버 카페

Do it!, 된다 시리즈 책으로 함께 공부하고 서로 돕는 사람들을 만나 보세요. python, C, java, Android

cafe.naver.com

 

2) 점프투 파이썬 라이브러리 예제편

1) 난이도 : ★★

--> 난이도는 개인적으로 생각할 때 파이썬 기초문법 정도를 알고 오면 학습에는 큰 어려움이 없을 것 같습니다. 예제를 통해 실습함으로써 코드를 작성하는 형태에 대해서도 배울 수 있는 기회가 되는 것 같습니다!

 

2) 핵심내용: 

- 파이썬을 입문한 뒤 "이제 내가 무엇을 만들 수 있을까"를 고민하는 독자를 위해 집필한 책 입니다.

- 01~18장까지 구성되어 있으며 1~17장은 표준라이브러리 소개로 되어있고 18장은 pip를 통해 설치할 수 있는 외부라이브러리가 소개되어 있습니다.

- 파이썬 생태계에서는 다양한 라이브러리가 존재함으로 어떤 것들이 있는 지 다 파악하기 어려운데 이 책에서는 분야별로 정리되어 있으며, 현재 많이 사용되는 버전을 중심으로 실습하여 코드의 재사용성이 가능하다는 점이 있습니다.

 

3) 예시로 책 내용 살펴보기: 

12강의 동시에 실행하기안의 내용을 예제로 준비하였습니다.

-> python으로 코드를 작성하고 배우고 나면 다양한 기능을 제공하고 라이브러리 생태계 또한 매우 크다는 것을 보고 놀라게 됩니다. 보통 프로그램에서 사용하기 위해서는 실행시간이나 최적화 부분의 다양한 요구를 만족해야 하는데 파이썬 역시 스레드 , 멀티프로세싱 등 모듈을 지원합니다.

 

<threading 모듈>

-> 한 프로세스에서 2가지 이상의 일을 동시에 실행할 수 있게 하는 모듈입니다.

import urllib.request


def get_wikidocs(page):
    print("wikidocs page:{}".format(page))  # 페이지 호출시 출력
    resource = 'https://wikidocs.net/{}'.format(page)
    try:
        with urllib.request.urlopen(resource) as s:
            with open('wikidocs_%s.html' % page, 'wb') as f:
                f.write(s.read())
    except urllib.error.HTTPError:
        return 'Not Found'


import time

start = time.time()

pages = [12, 13, 14, 15, 17, 18, 20, 21, 22, 24]
for page in pages:
    get_wikidocs(page)

end = time.time()

print("수행시간: %f 초" % (end - start)

위의 코드는 wikidocs의 페이지에 접속하여 리소스를 받아와서 접속하게 하는 코드로 해당 url에 접속한 후 page =[12,13,14 ..] 등 여러개를 받아온다고 할 때 순차적으로 실행하는 코드의 예시입니다.

그러나 이렇게 순차적으로 수행하게 되면 앞의 작업이 뒤의작업에 영향을 미치거나 필요한 경우를 제외했을 때는 시간이 오래 걸린다는 단점이 있습니다. 이를 효과적으로 수행하기 위해서 threading 모듈을 import하여 아래와 같이 작성한 코드 예시를 살펴보겠습니다.

import urllib.request


def get_wikidocs(page):
    print("wikidocs page:{}".format(page))  # 페이지 호출시 출력
    resource = 'https://wikidocs.net/{}'.format(page)
    try:
        with urllib.request.urlopen(resource) as s:
            with open('wikidocs_%s.html' % page, 'wb') as f:
                f.write(s.read())
    except urllib.error.HTTPError:
        return 'Not Found'


import time
import threading

start = time.time()

pages = [12, 13, 14, 15, 17, 18, 20, 21, 22, 24]
threads = []
for page in pages:
    t = threading.Thread(target=get_wikidocs, args=(page, ))
    t.start()
    threads.append(t)

for t in threads:
    t.join()  # 스레드가 종료될 때까지 기다린다.

end = time.time()

print("수행시간: %f 초" % (end - start))

위에서 threading 모듈을 불러와서 Thread 메소드를 사용할 때 target="수행할 작업" , args="함수내 argument" 를 써준뒤 threads 리스트에 담게 됩니다. 리스트에서 하나씩 스레드 t를 사용하기 위해서 for문을 작성하였는데, 이는 생성된 스레드를 threads 변수에 담아 두어야 스레드가 종료될 때까지 기다리는 join() 함수를 for문 밖에서 차례대로 호출할 수 있기 때문입니다.

 

 

위의 예제와 같이 모듈을 사용해야하는 상황과 방법 그리고 풀이까지 친절하게 되어 있어서 이해하기 쉽습니다!python의 기본 문법을 이해하고, "어떻게 활용하지 ?" 라고 고민하는 분들에게 추천하는 책입니다!

 

앞으로 해당책을 학습하면서 중요하고 기억이 될 내용들을 가지고 블로그를 작성할 예정입니다.

서평이벤트를 진행해주신 편집자님께 감사의 말씀을 드립니다.

반응형
Comments