Browse Source

[fix] lock request pool generator

Adam Tauber 9 years ago
parent
commit
357fc47811
1 changed files with 6 additions and 4 deletions
  1. 6 4
      searx/poolrequests.py

+ 6 - 4
searx/poolrequests.py

@@ -1,5 +1,7 @@
 import requests
 import requests
+
 from itertools import cycle
 from itertools import cycle
+from threading import RLock
 from searx import settings
 from searx import settings
 
 
 
 
@@ -55,9 +57,10 @@ class SessionSinglePool(requests.Session):
         super(SessionSinglePool, self).__init__()
         super(SessionSinglePool, self).__init__()
 
 
         # reuse the same adapters
         # reuse the same adapters
-        self.adapters.clear()
-        self.mount('https://', next(https_adapters))
-        self.mount('http://', next(http_adapters))
+        with RLock():
+            self.adapters.clear()
+            self.mount('https://', next(https_adapters))
+            self.mount('http://', next(http_adapters))
 
 
     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"""
@@ -67,7 +70,6 @@ class SessionSinglePool(requests.Session):
 
 
 def request(method, url, **kwargs):
 def request(method, url, **kwargs):
     """same as requests/requests/api.py request(...) except it use SessionSinglePool and force proxies"""
     """same as requests/requests/api.py request(...) except it use SessionSinglePool and force proxies"""
-    global settings
     session = SessionSinglePool()
     session = SessionSinglePool()
     kwargs['proxies'] = settings['outgoing'].get('proxies', None)
     kwargs['proxies'] = settings['outgoing'].get('proxies', None)
     response = session.request(method=method, url=url, **kwargs)
     response = session.request(method=method, url=url, **kwargs)