2010-06-25 3 views
1

저는 파이썬과 멀티 스레딩을 처음 접했으므로 저와 함께하시기 바랍니다.Python 멀티 스레딩을 통한 성능 향상 방법

"신뢰도"의 척도로 웹 사이트의 순위를 결정하고 CSV에 쓰는 서비스 인 Web of Trust를 통해 목록의 도메인을 처리하는 스크립트를 작성하고 있습니다. 안타깝게도 Web of Trust의 서버는 응답하는 데 꽤 오래 걸릴 수 있으며 100,000 개의 도메인을 처리하는 데 몇 시간이 걸릴 수 있습니다.

지금까지 멀티 스레딩 시도가 실망 스러웠습니다. this answer에서 스크립트를 수정하면 스레딩 오류가 발생했지만 일부 스레드는 해결하기가 너무 오래 걸리기 때문에 믿습니다.

여기 내 수정되지 않은 스크립트가 있습니다. 누군가가 다중 스레드를 도와 주거나 좋은 다중 스레드 리소스를 가르쳐 줄 수 있습니까? 미리 감사드립니다.

import urllib 
import re 

text = open("top100k", "r") 
text = text.read() 
text = re.split("\n+", text) 

out = open('output.csv', 'w') 

for element in text: 
     try: 
       content = urllib.urlopen("http://api.mywot.com/0.4/public_query2?target=" + element) 
       content = content.read() 
       content = content[content.index('<application name="0" r="'):content.index('" c')] 
       content = element + "," + content[25] + content[26] + "\n" 
       out.write(content) 
     except: 
       pass 
+1

GIL (예 : Python C 확장자 작성)을 사용하지 않는 한 파이썬에서의 스레딩은 종종 씻겨집니다. 위의 경우 IO 블록에서 보낸 시간 때문에 정상적으로 작동 할 수 있습니다 ... 어쨌든, 꼬인 대신 (단일 스레드) 이벤트 프레임 워크를 사용 했습니까? –

+0

내 서버에서 실행되지 않기 때문에 타사 프레임 워크를 설치하지 않고이 작업을 수행하는 것이 좋습니다. – Tom

+1

예상대로 WOT는 데이터베이스를 그런 식으로 복사하는 것을 좋아하지 않으므로 요청 (http://www.mywot.com/pl/terms/api)을 막기 시작할 수 있습니다 ... 아마도 당신 상용 서비스를 사용해야합니까? – mbq

답변

1

WOT API 문서를 통해 빠른 검사뿐만 아니라 사용중인 public_query2 요청으로, 당신은 내가 사용하는 것이 좋습니다 것 (100)까지의 일괄 데이터를 얻을 수있는 public_query_json 요청이 있음을 보여줍니다 많은 요청을 병렬로 처리하여 서버에 범람하기 전에

+0

답변 해 주셔서 감사합니다. – Tom