Mam 3 sterowniki (przeglądarki Firefox) i chcę je na do something
na liście stron internetowych.Multiprocessing and Selenium Python
Mam pracownik zdefiniowany jako:
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")
Zatem pracownik będzie tylko acces do kolejki, która zawiera identyfikatory i wykorzystać przeglądarkę, aby coś zrobić.
Chcę mieć pulę pracowników tak, aby jak tylko pracownik zakończył korzystanie z przeglądarki, aby zrobić coś na stronie zdefiniowanej przez id_, to natychmiast zaczyna działać przy użyciu tej samej przeglądarki, aby zrobić coś w następnym id_ znaleziono w kolejce. Mam wtedy:
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)
Tutaj mam problem, nie wiem jak zdefiniować moich pracowników, aby byli w basenie. Do każdego sterownika muszę przypisać pracownika, a wszyscy pracownicy dzielą tę samą kolejkę identyfikatorów. czy to możliwe? Jak mogę to zrobić?
Inną ideą, którą mam, jest utworzenie kolejki przeglądarek, tak aby w przypadku, gdy sterownik nic nie robi, jest on pobierany przez pracownika wraz z id_ z kolejki w celu wykonania nowego procesu. Ale jestem zupełnie nowy w dziedzinie przetwarzania wieloprocesowego i nie wiem, jak to napisać.
Doceniam twoją pomoc.
Dlaczego nie instancję przeglądarkę w pracownika, zanim rozpocznie się 'while' pętla? –
@LeviNoecker Zrobię to! –
@LeviNoecker można wysłać odpowiedź, aby zaakceptować, jest jako odpowiedź? –