Browse Source

[mod] poolrequests: for one (user request, engine) always use the same HTTPAdapter

The duckduckgo engine requires an additional request after the results have been sent.
This commit makes sure that the second request uses the same HTTPAdapter
= the same IP address, and the same proxy.
Alexandre Flament 4 years ago
parent
commit
74d56f6cfb
1 changed files with 7 additions and 5 deletions
  1. 7 5
      searx/poolrequests.py

+ 7 - 5
searx/poolrequests.py

@@ -1,7 +1,7 @@
 import sys
 import sys
 from time import time
 from time import time
 from itertools import cycle
 from itertools import cycle
-from threading import RLock, local
+from threading import local
 
 
 import requests
 import requests
 
 
@@ -88,10 +88,12 @@ class SessionSinglePool(requests.Session):
         super().__init__()
         super().__init__()
 
 
         # reuse the same adapters
         # reuse the same adapters
-        with RLock():
-            self.adapters.clear()
-            self.mount('https://', next(https_adapters))
-            self.mount('http://', next(http_adapters))
+        self.adapters.clear()
+
+        https_adapter = threadLocal.__dict__.setdefault('https_adapter', next(https_adapters))
+        http_adapter = threadLocal.__dict__.setdefault('http_adapter', next(http_adapters))
+        self.mount('https://', https_adapter)
+        self.mount('http://', http_adapter)
 
 
     def close(self):
     def close(self):
         """Call super, but clear adapters since there are managed globaly"""
         """Call super, but clear adapters since there are managed globaly"""