
- python 자동화에 대해서 공부하는 도중 멀티쓰레딩, 멀티 프로세스라는 개념을 배우게 되었다.
- 다중처리가 자동화에 많은 도움이 될 것 같다는 생각에 공부를 시작하였고 공부한 것에 대해서 끄적인 글이다.
python은 기본적으로 스크립트 언어이다.
소스코드를 한 줄씩 읽어 들여 싱글쓰레드에서 순차적으로 동작하기에(쉽게 말해, 위에서 아래로 물 흐르듯이)
여러 가지일을 병렬적으로(또는, 동시다발적으로) 처리하기 위해서는 다양한 장치들이 있어야 한다.
그 장치라는 것이 바로 '멀티 쓰레딩, 멀티 프로세스'이다.
멀티 쓰레딩, 멀티 프로세스에 말하기 앞서 쓰레드가 뭔지 프로세스간 뭔지 알아보자.
프로세스와 쓰레드에 대해서 알아보았다. 그럼 이제 싱글이 아닌 멀티로 python을 동작시키는 멀티 쓰레딩, 멀티 프로세스에 대해서 알아보자.
멀티 프로세스 VS 멀티 쓰레딩에 대한 의견
- 서로 장단점이 있기에 상황에 맞게 쓰는 것이 좋을 것 같다.
- 개인적으로 python 멀티를 공부함에 있어 자동화 분야에는 멀티 쓰레딩이 많이 쓰일 것 같다는 생각이 들었다.(여러 사이트 크롤링?, 여러 api 활용 아니면 여러 DB 활용?)
- 따라서 멀티 프로세스는 간단히 개념에 대해서만 배워가고 멀티 쓰레딩을 따로 코드로 실습을 진행하였다.
- 아래에 기술된 코드가 실제 공부하였던 코드이다.
import requests
from multiprocessing.dummy import Pool as ThreadPool
def crawling(url):
data = requests.get(url)
return data.content
url = ['https://www.naver.com/','https://velog.io/@lcs3947']
pool = ThreadPool(4)
result = pool.map(crawling, url)
pool.close()
pool.join()
print(result)
map 추가 설명
map은 list의 요소를 지정된 함수로 처리해주는 것
사용방법은 map(def,list)이다.
쉽게 말해 이런 list가 있다고 가정하자.list = [2,3,4]이 list의 요소들에다가 각각 1씩 더하고 싶다면 어떻게 해야 할까?
보통은 for문을 돌려 제어할 수 있다.list = [2,3,4] for i in range(len(list)): list[i] = list[i] + 1 print(list)하지만 map을 이용하면 조금 더 색다르게 제어할 수 있다.
ex_list = [2,3,4] def plus(x): return x + 1 result = map(plus, ex_list) ex_list = [2,3,4] def plus(x): return x + 1 result = map(plus, ex_list) print(list(result))둘 다 같은 값 [3,4,5]를 보여 준다.
(단순 더하기라 map을 이용하는 것이 for문을 이용하는 것보다 길어보이는 것은..)
출처: https://iambeginnerdeveloper.tistory.com/186, https://blockdmask.tistory.com/22, https://velog.io/@xxhaileypark/%EB%A9%80%ED%8B%B0-%EC%8A%A4%EB%A0%88%EB%93%9CMulti-Thread-%EB%A9%80%ED%8B%B0-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4Multi-process