파이썬 멀티프로세싱

파이썬 멀티프로세싱

작성일 2021.01.22댓글 1건
    게시물 수정 , 삭제는 로그인 필요

파이썬으로 멀티프로세싱 모듈을 사용한 웹스크래핑 코드를 작성하고 있습니다.

danawa_search 함수에 들어가면 sh_data 배열(한글정보)에 들어있는 정보를 url 인코딩하여 danawa_url과 합쳐 검색하는 코드입니다. 

실행을 해보면 다나와 사이트에서 하나씩 검색하여 그 페이지가 나와야하는데 http://www.danawa.com/dsearch.php?query=인
으로 검색됩니다.
멀티프로세싱을 사용하지 않고 단일프로세스로 실행하면 원하는대로 접속이 이루어집니다. 무엇이 문제일까요?

import time
from multiprocessing import Pool
from selenium import webdriver
from bs4 import BeautifulSoup
import urllib

danawa_url = 'http://search.danawa.com/dsearch.php?query='

def danawa_search(link):
    browser = webdriver.Chrome()
    for x in link:
        danawa_link = ""
        search_product_name = x
        product_link = danawa_url + urllib.parse.quote(x)
        print(product_link)
        browser.get(product_link)

if __name__ == '__main__':
    start_time = time.time()
    pool = Pool(processes=2)
    # shcom_data = [shcom_search()]
    sh_data = ['인텔 코어i5-10세대 10400 코멧레이크S''AMD 라이젠5-3세대 마티스 3600''인텔 코어i7-10세대 10700K 코멧레이크S']
    
    pool.map(danawa_search, sh_data)
    #danawa_search(shcom_data)
    print("--- %s seconds ---" % (time.time() - start_time))


#파이썬 멀티프로세싱 #파이썬 멀티프로세싱 pool #파이썬 멀티프로세싱 데이터 공유 #파이썬 멀티프로세싱 멀티스레딩 차이 #파이썬 멀티프로세싱 예제 #파이썬 멀티프로세싱 코어 수 #파이썬 멀티프로세싱 무한루프 #파이썬 멀티프로세싱 크롤링 #파이썬 멀티프로세싱 멀티스레딩 #파이썬 멀티프로세싱 변수 공유

profile_image 익명 작성일 -

pool.map(danawa_search, sh_data)

위의 pool.map메소드의 두번째 인자인 sh_data는

def danawa_search(link)

danawa_search 함수가 실행될 때 배열의 원소가 자동으로 분리되어 link 매개변수에 할당됩니다. 그런데 질문자 님은 danawa_search 함수 안에서

for x in link: danawa_link = "" search_product_name = x product_link = danawa_url + urllib.parse.quote(x) print(product_link) browser.get(product_link)

처럼 이미 분리된 리스트의 원소를 다시 반복문 처리 하였습니다.

리스트의 원소는 문자열이므로 문자열을 반복하게 되면 한 문자씩 변수 x에 입력됩니다.

따라서 반복문을 없애주기만 하면 정상 실행됩니다.

최종코드

import time from multiprocessing import Pool from selenium import webdriver from bs4 import BeautifulSoup import urllib danawa_url = 'http://search.danawa.com/dsearch.php?query=' sh_data = ['인텔 코어i5-10세대 10400 코멧레이크S', 'AMD 라이젠5-3세대 마티스 3600', '인텔 코어i7-10세대 10700K 코멧레이크S'] def danawa_search(리스트의_원소): browser = webdriver.Chrome() product_link = danawa_url + urllib.parse.quote(리스트의_원소) print(product_link) browser.get(product_link) browser.close() if __name__ == '__main__': start_time = time.time() Pool(processes=3).map(danawa_search, sh_data) print(f"--- {(time.time() - start_time) :.2f} seconds ---" )

결과

http://search.danawa.com/dsearch.php?query=%EC%9D%B8%ED%85%94%20%EC%BD%94%EC%96%B4i7-10%EC%84%B8%EB%8C%80%2010700K%20%EC%BD%94%EB%A9%A7%EB%A0%88%EC%9D%B4%ED%81%ACS http://search.danawa.com/dsearch.php?query=AMD%20%EB%9D%BC%EC%9D%B4%EC%A0%A05-3%EC%84%B8%EB%8C%80%20%EB%A7%88%ED%8B%B0%EC%8A%A4%203600 http://search.danawa.com/dsearch.php?query=%EC%9D%B8%ED%85%94%20%EC%BD%94%EC%96%B4i5-10%EC%84%B8%EB%8C%80%2010400%20%EC%BD%94%EB%A9%A7%EB%A0%88%EC%9D%B4%ED%81%ACS --- 6.58 seconds ---

파이썬 멀티프로세싱 관련질문

... 멀티프로세싱으로 300초정도 걸렸던 계산을 90여초로 줄여서 좋아라 하고있는데, 또 다른 벽에 부딪혔네요. 훨씬 단순화 했지만 구조는 아래와...

파이썬프로세싱의 차이

파이썬프로세싱의 차이가 궁급합니다 그리고 각각의 장단점도 알려주세요... 사운드, 이미지, 동영상, 실시간 비디오 등 멀티미디어 처리가 쉽습니다 인터넷 등...

파이썬 명령어 이름

... 알려주세요 파이썬은 기본이 하나씩의 프로세서만 처리 합니다. 순서데로 진행하고... 멀티 프로세싱이 더 어렵죠. 정확하게 어떤 상황인 것 인지를 기술해 보세요.

파이썬 try except

... 멀티프로세싱파이썬의 multiprocessing 모듈을 사용하고, 멀티쓰레딩은 파이썬의 threading 모듈을 사용하여 구현할 수 있습니다. 다만, 멀티쓰레딩은 GIL(Global...

파이썬 멀티프로세싱 데이터 공유

... 방학 기간 중 파이썬 웹 크롤링 구현을 도전하고 있는 한 학생입니다.... 하기보다 멀티프로세싱으로 구현하고 싶어 공유 메모리를 찾아보니 자료가 많지...