2016-10-03 19 views
6

私は3つのドライバ(Firefoxブラウザ)を持っていて、それらをウェブサイトのリストの中でdo somethingにします。マルチプロセッシングとSelenium 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が含まれていると何かをするブラウザを使用してキューにアクセスもします。

私は、作業者がid_で定義されたWebサイトで何かを行うためにブラウザを使用し終えるとすぐに、同じブラウザを使用して次の作業をすぐに開始できるように、 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() 
関連する問題