Semplice script di multithreading parallelo

3

Sto provando a scrivere uno script python che crea 10 thread alla volta e viene eseguito finché non lo interrompo (cioè chiudendo la console). Ho solo bisogno di fare il logging di base, quindi quando fallisce, registra solo un risultato non riuscito in un file di log.

La parte dello script che devo inserire è solo un semplice script di selenio che va a una pagina web e invia una casella di testo.

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys

browser = webdriver.Firefox()
browser.get('http://www.google.com')

search = browser.find_element_by_name('q')
search.send_keys("google search through python")
search.send_keys(Keys.RETURN) # hit return after you enter search text
time.sleep(5) # sleep for 5 seconds so you can see the results
browser.quit()

Non ho idea di cosa sia meglio usare in questo caso. Per quanto posso dire, Python consente attività concorrenti, ma solo se si utilizza la libreria di multiprocessing. Se si utilizza il threading, potrebbe essere più veloce, ma non veloce come le attività della CPU simultanee.

Sto cercando di implementarlo in futures.concurrency e sarei grato per qualsiasi suggerimento sulla scelta migliore da usare e su come usarlo.

    
posta Ke. 10.03.2017 - 14:27
fonte

1 risposta

2

Il tuo script sembra essere IO-Bound e non CPU-Bound. Come tale, trarrà vantaggio dai thread anche con GIL in posizione, perché chiamate come browser.get e search.send_keys bloccheranno fino a quando il socket non invia / riceve.

Beneficerai di multiprocessing se avessi attività concorrenti a lungo termine che devono superare GIL e stanno facendo costantemente lavoro alla CPU allo stesso tempo.

Utilizza ThreadPoolExecutor . Puoi cambiare Executor in qualsiasi momento per utilizzare i processi, perché implementano la stessa interfaccia.

    
risposta data 13.03.2017 - 09:47
fonte

Leggi altre domande sui tag