2017-04-17 6 views
2

파이썬 3.6Python Multiprocessing 어떻게 스크립트를 더 빠르게 만들 수 있습니까?

웹 사이트의 모든 링크가 작동하는지 확인하기 위해 스크립트를 작성하고 있습니다.

필자는 버전이 있지만 파이썬 인터프리터가 한 번에 하나의 요청만을 실행하기 때문에 느리게 실행됩니다. 셀레늄을 가져 와서 링크를 목록에 표시했습니다. 나는 41000 개의 링크 목록으로 시작했다. 나는 지금 나의 명부에있는 7300의 연결에이다 중복을 제거했다. 요청 모듈을 사용하여 응답 코드를 확인하고 있습니다. 다중 처리가 여러 가지 방법을 사용하는 답이라고 알고 있습니다. 내 요구에 가장 적합한 것은 무엇입니까? 한 번에 많은 스레드를 실행할 수 없으므로 서버 웹 페이지의 요청에 따라 웹 서버 스레드를 보내지 마십시오. 고맙습니다. 이것은 내가 처음으로 포럼에 게시 할 때 프로토콜을 따르지 않으면 실례합니다.

def check_links(y): 
 
    for ii in y: 
 
     try: 
 
      r = requests.get(ii.get_attribute('href')) 
 
      rc = r.status_code 
 
      print(ii.get_attribute('href'), ' ', rc) 
 
     except Exception as e: 
 
      logf.write(str(e)) 
 
     finally: 
 
      pass

답변

0

그냥해야하는 경우 : 여기

고급

감사 트래비스

내가 속도를 높이기 위해 노력하고 파이썬 요청 모듈과 링크를 확인하는 기능입니다 목록의 모든 항목에 동일한 기능을 적용하려면 프로세스 풀을 사용하고 입력을 맵핑하면됩니다. 다음은 간단한 예입니다 : 내가 imap_unordered 사용하는 예에서

from multiprocessing import pool 

def square(x): 
    return {x: x**2} 

p = pool.Pool() 
results = p.imap_unordered(square, range(10)) 

for r in results: 
    print(r) 

뿐만 아니라 mapimap 봐. 당신은 당신의 필요에 가장 잘 맞는 것을 선택해야합니다.