Popularna biblioteka Pythona o nazwie Requests jest uważana za wątkową na swojej stronie głównej, ale nie podano dalszych szczegółów. Jeśli zadzwonię requests.session()
, mogę potem bezpiecznie przekazać ten obiekt do wielu wątków tak:Czy obiekt Session z wątku biblioteki zapytań Pythona jest bezpieczny?
session = requests.session()
for i in xrange(thread_count):
threading.Thread(
target=target,
args=(session,),
kwargs={}
)
i żądań przy użyciu tej samej puli połączeń w wielu wątków?
Jeśli tak, czy jest to zalecana metoda, czy też każdy wątek powinien mieć własną pulę połączeń? (Zakładając, że łączna wielkość wszystkich pojedynczych pul połączeń zostanie zsumowana do wielkości jednej dużej puli połączeń, takiej jak powyższa.) Jakie są plusy i minusy każdego podejścia?
Czy wiesz, co jest lepsze? Aktualnie mam prawie to samo pytanie. Myślałem o nowej sesji dla każdego wątku, aby nie zawęzić wszystkich żądań w jednej puli połączeń. –
@Marcel Wilson Niezupełnie. Chociaż w przypadku jednego z moich projektów, w którym używałem obiektu sesji, aby wielokrotnie żądać tego samego adresu URL, wysłałem ten sam obiekt sesji do wszystkich wątków. Aplikacja wydaje się działać, ale nadal nie jestem pewien, jakie jest lepsze podejście. Zauważ jednak, że moim problemem nie było wąskie gardło w pulach połączeń, ale zamiast tego otwierałem zbyt wiele połączeń i wysyłałem zbyt wiele żądań na raz. – dg123
Żądania są tworzone na górze urllib3. Bezpieczeństwo zapytań w wątku jest w dużej mierze spowodowane bezpieczeństwem wątków urllib3, dublowaniem, dla którego omawia się bardziej szczegółowo bezpieczeństwo wątku. – selllikesybok