2016-10-03 5 views
6

3 개의 드라이버 (Firefox 브라우저)가 있으며 웹 사이트 목록에 do something이 필요합니다.다중 처리 및 셀레늄 Python

def worker(browser, queue): 
    while True: 
     id_ = queue.get(True) 
     obj = ReviewID(id_) 
     obj.search(browser) 
     if obj.exists(browser): 
      print(obj.get_url(browser)) 
     else: 
      print("Nothing") 

그래서 작업자 그냥 ID를 포함하고 무언가를하기 위해 브라우저를 사용하여 대기열에 액세서됩니다

나는대로 근로자가 정의되어 있습니다.

나는 worker가 id_가 정의한 웹 사이트에서 뭔가를하기 위해 브라우저를 사용하자 마자 바로 다음 브라우저에서 뭔가를하기 위해 같은 브라우저를 사용하기 시작했다. id_가 대기열에 있습니다. 그때 나는 이것을 가지고있다 :

pool = Pool(processes=3) # I want to have 3 drivers 
manager = Manager() 
queue = manager.Queue() 
# Define here my workers in the pool 
for id_ in ids: 
    queue.put(id_) 
for i in range(3): 
    queue.put(None) 

나는 여기에 문제가있다, 나는 그들이 수영장에 있도록 내 종업원을 정의하는 방법을 모른다. 각 드라이버마다 작업자를 지정해야하며 모든 작업자는 같은 ID의 큐를 공유합니다. 이것이 가능한가? 내가 어떻게 해?

또 다른 아이디어는 브라우저의 대기열을 작성하여 드라이버가 아무 것도하지 않으면 대기열의 id_와 함께 새로운 프로세스를 수행 할 수 있도록하는 것입니다. 하지만 저는 멀티 프로세싱에 완전히 익숙하지 않아 실제로 이것을 쓰는 방법을 모른다.

감사합니다.

+1

왜'while' 루프가 시작되기 전에, 작업자의 브라우저를 인스턴스화하지? –

+0

@LeviNoecker 내가 해낼거야! –

+0

@LeviNoecker가 답변을 수락하기 위해 답변을 게시 할 수 있습니까? –

답변

4

당신은 작업자의 브라우저의 인스턴스를 시도 할 수 :

def worker(queue): 
    browser = webdriver.Chrome() 
    try: 
     while True: 
      id_ = queue.get(True) 
      obj = ReviewID(id_) 
      obj.search(browser) 
      if obj.exists(browser): 
       print(obj.get_url(browser)) 
      else: 
       print("Nothing") 
    finally: 
     brower.quit() 
관련 문제