Pythons beliebte Requests-Bibliothek soll Thread-Safe auf seiner Homepage sein, aber keine weiteren Details angegeben. Wenn ich requests.session()
nenne, kann ich dann passieren sicher dieses Objekt mehr Threads wie so:Ist das Session-Objekt aus Pythons Requests-Bibliothek threadsicher?
session = requests.session()
for i in xrange(thread_count):
threading.Thread(
target=target,
args=(session,),
kwargs={}
)
und Anfragen stellt den gleichen Verbindungspool in mehreren Threads verwendet werden?
Wenn ja, ist dies der empfohlene Ansatz, oder sollte jedem Thread ein eigener Verbindungspool zugewiesen werden? (Angenommen, die Gesamtgröße aller einzelnen Verbindungspools summiert sich zu der Größe eines großen Verbindungspools wie oben.) Was sind die Vor- und Nachteile der einzelnen Ansätze?
Haben Sie herausgefunden, welche ist besser? Ich stoße gerade auf die gleiche Frage. Ich habe für jeden Thread eine neue Sitzung geplant, um alle Anfragen in einem einzelnen Verbindungspool nicht zu blockieren. –
@Marcel Wilson Nicht genau. Obwohl ich für eines meiner Projekte, bei dem ich ein Sitzungsobjekt verwendete, um die gleiche URL immer wieder anzufordern, habe ich das gleiche Sitzungsobjekt an alle Threads gesendet. Die Anwendung scheint zu funktionieren, aber ich bin mir immer noch nicht sicher, was der bessere Ansatz ist. Beachten Sie jedoch, dass mein Problem nicht darin bestand, die Verbindungspools zu komprimieren, sondern dass zu viele Verbindungen geöffnet und gleichzeitig zu viele Anfragen gesendet wurden. – dg123
Anfragen werden auf urllib3 erstellt. Die Thread-Sicherheit von Anfragen ist weitgehend auf die Thread-Sicherheit von urllib3 zurückzuführen, für die die Thread-Sicherheit detaillierter diskutiert wird. – selllikesybok