나는 쓰레드 된 스크립트에서 첫 시도를하고있다. 결국 이전에 만든 원래의 선형 스크래핑 스크립트보다 조금 더 빠르게 작동하는 웹 스크래퍼가 될 것입니다.Python Threading/Thread Implement
몇 시간 동안 읽고 예제 코드로 재생 한 후. 여전히 구현이 간다면 무엇이 옳은지 확실하지 않습니다.
from Queue import Queue
import threading
def scrape(queue):
global workers
print worker.getName()
print queue.get()
queue.task_done()
workers -= 1
queue = Queue(maxsize=0)
threads = 10
workers = 0
with open('test.txt') as in_file:
for line in in_file:
queue.put(line)
while not (queue.empty()):
if (threads != workers):
worker = threading.Thread(target=scrape, args=(queue,))
worker.setDaemon(True)
worker.start()
workers += 1
아이디어는 내가있는 test.txt 파일의 URL 목록을 가지고있다 :
현재 내가 가지고 노는 한 다음과 같은 코드가 있습니다. 파일을 열고 모든 URL을 대기열에 넣습니다. 거기에서 나는 큐에서 당겨서 10 개의 쓰레드를 실행하고 웹 페이지를 긁어 낸다. 또는이 예제에서는 잡아 당긴 라인을 단순히 출력한다.
일단 작업이 완료되면 '작업자 스레드'가 제거 된 다음 대기열이 비어있을 때까지 새 작업자 스레드가 교체됩니다.
내 실제 구현에서 어느 시점에서 필자는 내 함수 스크랩에서 데이터를 가져 와서 .csv 파일에 써야 할 것입니다. 하지만, 지금 당장은 스레드를 올바르게 구현하는 방법을 이해하려고 시도하고 있습니다.
나는 'Thread'를 사용하는 비슷한 예제를 보았습니다 ... 또한 상속 된 클래스를 활용하는 'threading'예제를 보았습니다. 나는 내가 무엇을 사용해야하며 그것을 관리하는 적절한 방법을 알고 싶다.
나를 쉽게 편하게 여기십시오. 실은 초보자가 실을 이해하려고 애 쓰고 .... 그렇습니다. 매우 복잡 할 수 있습니다. 그러나 이것은 처음 시도하기에 충분히 쉬워야한다고 생각합니다 ...
일반적으로 스레딩은 상당히 복잡하며 대부분의 경우 다중 처리 (.dummy) 또는 동시 처리와 같은 추상화 라이브러리를 사용하는 것이 더 쉽습니다. – janbrohl