1
셀렌 스크립트를 실행하기 위해 파이썬 다중 처리 라이브러리를 사용하고 있습니다. 내 코드는 다음과 같습니다 :연속 루프에서 파이썬 다중 처리 풀을 사용하는 방법
#-- start and join multiple threads ---
thread_list = []
total_threads=10 #-- no of parallel threads
for i in range(total_threads):
t = Process(target=get_browser_and_start, args=[url,nlp,pixel])
thread_list.append(t)
print "starting thread..."
t.start()
for t in thread_list:
print "joining existing thread..."
t.join()
나는 join()
기능을 알 수있는 바와 같이,이 완료 될 때까지 각 프로세스에 대해 대기합니다. 그러나 프로세스가 해제 되 자마자 새로운 기능을 수행하는 또 다른 작업이 할당되기를 바랍니다.
는 이것은 다음과 같이 이해 될 수있다 :
8 개 프로세스가 첫 번째 인스턴스에서 시작 말한다. 대신 모든 이제 다음 새로운 프로세스를 시작하는
no_of_tasks_to_perform = 100
for i in range(no_of_tasks_to_perform):
processes start(8)
if process no 2 finished executing, start new process
maintain 8 process at any point of time till
"i" is <= no_of_tasks_to_perform
그것이 –
@shane @Shane ... 잘 날 위해 감사했다, 어디에서이 설정의 8 개 프로세서는? 간단히 말해서 : process.start (8). webDriver 인스턴스를 설정하고 대기열의 매개 변수로 내 스크래핑 함수를 호출하도록 클래스를 초기화 할 수있는 사용자 정의 파이썬 모듈 I 소스가 있습니다. 하지만 하나의 X-window 프레임 버퍼 (Xvfb)와 headless chromedriver 인스턴스가 8 개의 다른 프로세스로 작업 대기열 (수천 개)을 실행하는 방법을 궁금해하기 때문에 8 개의 다른 webDrivers를 풀로 인스턴스화해야 할 필요가 없습니다. ? – Ricalsin
이 설정에서는 수동으로 8 개의 프로세스 (또는 원하는대로)를 수동으로 시작하고 새로운 작업을 계속 가져올 수 있도록 각각의 프로세스를 장기 실행 프로세스로 만듭니다 (예 : 브라우저를 인스턴스화하고 작업 수행). 'process1 = Process (target = worker, args = (queue,))'...'process8 ...'. 'multiprocessing.Pool'을 사용하기를 원한다면'map'을 사용하여 함수를 전달해야하지만, 실제로는 여러 매개 변수를 사용할 때 특히 편리합니다. http : //stackoverflow.com/a/5442981/7405394 – Shane