Python Threading vs Gevent per High Volume web scraping

voti
0

Sto cercando di decidere se devo usare gevent o filettatura per implementare la concorrenza per il web scraping in python.

Il mio programma dovrebbe essere in grado di supportare un gran numero (~ 1000) dei lavoratori concorrenti. La maggior parte del tempo, i lavoratori saranno in attesa di richieste di tornare.

Alcune domande guida: Che cosa è esattamente la differenza tra un filo e un greenlet? Qual è il numero massimo di thread \ greenlets dovrei creare in un unico processo (per quanto riguarda le specifiche del server)?

È pubblicato 04/02/2018 alle 12:02
dall'utente
In altre lingue...                            


2 risposte

voti
0

Non credo che avete pensato questa cosa attraverso. Ho fatto alcune notevoli applicazioni filo leggeri con Greenlets creati dal quadro Gevent. Finché si consente il controllo per passare da Greenlets con un'adeguata sonno o un interruttore di - tutto tende a funzionare bene. Invece di blocco o in attesa di una risposta, si raccomanda che l'attesa o il blocco timeout, alzare ed eccezione e poi dormire (in tranne parte del codice) e poi di nuovo ciclo - altrimenti non si passa Greenlets facilmente.

Inoltre, fare attenzione ad aderire e / o uccidere tutti i Greenlets, dal momento che si potrebbe finire con zombie che causano effetti copiosi che non si desidera.

Comunque, io non consiglierei questo per la vostra applicazione. Piuttosto, una delle seguenti estensioni WebSockets che utilizzano Gevent ... Vedere questo link

WebSockets a Flask

e questo link

https://www.shanelynn.ie/asynchronous-updates-to-a-webpage-with-flask-and-socket-io/

Ho implementato una bella app con Flask-SocketIO

https://flask-socketio.readthedocs.io/en/latest/

Si attraversa Gunicorn con Nginx molto bene da un contenitore Docker. Il SocketIO si interfaccia molto bene con JavaScript sul lato client.

(Fate attenzione sul web scraping - usare qualcosa come Scrapy con la raschiatura etica appropriata abilitato)

Risposto il 12/03/2019 a 18:55
fonte dall'utente

voti
0

Il filo di pitone è il filo sistema operativo che ha controllato dal sistema operativo che significa che è molto più pesante in quanto ha bisogno di cambio di contesto, ma il filo verde è leggero e dal momento che è in userspace il sistema operativo non creare o gestire loro. Penso che si possa utilizzare gevent, Gevent = eventloop(libev) + coroutine(greenlet) + monkey patch, Gevent darvi le discussioni, ma senza l'utilizzo di fili con che è possibile scrivere codice normale, ma hanno async IO. Assicurarsi che non si dispone di CPU roba legata nel codice.

Risposto il 29/08/2019 a 04:21
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more