2015-05-06 19 views
10

Ho letto alcuni post del 2013 che il team di Gunicorn stava progettando di creare un modello di lavoratore del livello buffer di threading, simile a come funziona la Waitress. E 'quello che fa il gthread async worker? I dipendenti di gthread sono stati rilasciati con la versione 19.0 nel 2014.Il lavoratore asincrono di Gunicorn è analogo alla Cameriera?

La cameriera ha un thread asincrono master che bufferizza le richieste e accoda ogni richiesta a uno dei suoi thread di lavoro di sincronizzazione quando l'I/O della richiesta è terminato.

Gunicorn gthread non ha molta documentazione, ma sembra simile. Da docs:

Il gthread di lavoro è un worker filettato. Accetta le connessioni nel ciclo principale, le connessioni accettate vengono aggiunte al pool di thread come processo di connessione.

chiedo solo perché non sono super-informato circa python async I/O di codice, anche se una lettura superficiale del gthread.py sembra indicare che si tratta di un processo di presa di buffering che protegge thread di lavoro da lungo Richieste di I/O (e buffer anche l'I/O di risposta).

https://github.com/benoitc/gunicorn/blob/master/gunicorn/workers/gthread.py

+0

Non ho mai usato la cameriera ma guardando il codice Gunicorn è un semplice wrapper attorno a 'concurrent.futures'. https://docs.python.org/3/library/concurrent.futures.html –

risposta

1

Il lavoratore filettato Gunicorn non buffer di I/O e non legge il corpo della richiesta nel thread principale.

Il ciclo principale gestisce in modo asincrono la chiamata accept() [1], ma il socket viene immediatamente inviato al pool di thread [2].