python thread-safety connection-pooling python-requests

¿Es seguro el objeto de sesión del hilo de la biblioteca Peticiones de Python?



thread-safety connection-pooling (2)

Después de revisar el origen de requests.session , voy a decir que el objeto de sesión podría ser seguro para subprocesos, dependiendo de la implementación de CookieJar que se utilice.

Session.prepare_request lee de self.cookies , y Session.send llama a extract_cookies_to_jar(self.cookies, ...) , y llama a jar.extract_cookies(...) ( jar siendo self.cookies en este caso).

La fuente de cookielib Python 2.7 adquiere un bloqueo ( threading.RLock ) mientras actualiza el jar, por lo que parece ser seguro para subprocesos. Por otro lado, la documentación de cookielib no dice nada acerca de la seguridad de las hebras, ¿entonces tal vez no se debe depender de esta característica?

ACTUALIZAR

Si sus subprocesos están mutando los atributos del objeto de la sesión, como headers , proxies , stream , etc., o llamando al método de mount o utilizando la sesión con la declaración with , etc., entonces no es seguro para subprocesos.

Se dice que la popular biblioteca de Requests Python es segura para subprocesos en su página de inicio, pero no se dan más detalles. Si llamo a requests.session() , ¿puedo pasar este objeto de forma segura a múltiples hilos de esta manera?

session = requests.session() for i in xrange(thread_count): threading.Thread( target=target, args=(session,), kwargs={} )

y hacer solicitudes usando el mismo grupo de conexiones en múltiples hilos?

Si es así, ¿es este el enfoque recomendado, o cada hilo debe tener su propio grupo de conexión? (Suponiendo que el tamaño total de todas las agrupaciones de conexiones individuales se suma al tamaño de lo que sería una gran agrupación de conexiones, como la anterior). ¿Cuáles son los pros y los contras de cada enfoque?