2016-10-03 43 views
6

3 sürücüm var (Firefox tarayıcıları) ve bunların bir web sitesi listesinde do something olmasını istiyorum.Çok İşlemcili ve Selenyum 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") 

Yani işçi sadece kimliklerini içeriyor ve bir şeyler yapmak tarayıcı kullanın bir sıraya acces olacaktır:

Ben bir işçi tanımlanır var.

Bir işçinin havuzuna sahip olmak istiyorum, böylece bir çalışan tarayıcıyı kullanarak id_ tarafından tanımlanan web sitesinde bir şeyler yapmak için bittiğinde, hemen bir tarayıcıda aynı tarayıcıyı kullanarak çalışmaya başlayacak. id_ kuyrukta bulundu. Sonra bu var:

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) 

Burada bir sorun var, ben onlar havuzda böylece benim işçileri nasıl tanımlanacağı bilmiyorum. Her sürücüye bir işçi atamam gerekiyor ve tüm çalışanlar aynı sıradaki kimlikleri paylaşıyor. Mümkün mü? Nasıl yapabilirim?

Elimde olduğum diğer bir fikir, bir tarayıcı kuyruğu oluşturmaktır, böylece bir sürücü hiçbir şey yapmazsa, yeni bir işlem gerçekleştirmek için bir işçinin sırayla bir id_ ile birlikte çekilmesidir. Ama ben çok işlemciye tamamen yeniyim ve bunu nasıl yazacağımı bilmiyorum.

Yardımlarınız için minnettarım.

+1

Neden 'while' döngü başlamadan önce, işçi tarayıcıyı örneğini değil? –

+0

@LeviNoecker Yapacağım! –

+0

@LeviNoecker cevabı kabul etmek için cevap gönderebilir misiniz? –

cevap

4

Sen işçi tarayıcıyı başlatmasını deneyebilirsiniz:

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()