mirror of
				https://github.com/searxng/searxng.git
				synced 2025-11-04 03:27:06 -05:00 
			
		
		
		
	[mod] searx.network: memory optimization
Avoid to create a SSLContext in AsyncHTTPTransportNoHttp
See:
* 0f61aa58d6/httpx/_transports/default.py (L271)
* https://github.com/encode/httpx/issues/2298
			
			
This commit is contained in:
		
							parent
							
								
									e16c007c22
								
							
						
					
					
						commit
						97b1df1629
					
				@ -61,11 +61,40 @@ def get_sslcontexts(proxy_url=None, cert=None, verify=True, trust_env=True, http
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class AsyncHTTPTransportNoHttp(httpx.AsyncHTTPTransport):
 | 
					class AsyncHTTPTransportNoHttp(httpx.AsyncHTTPTransport):
 | 
				
			||||||
    """Block HTTP request"""
 | 
					    """Block HTTP request
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    The constructor is blank because httpx.AsyncHTTPTransport.__init__ creates an SSLContext unconditionally:
 | 
				
			||||||
 | 
					    https://github.com/encode/httpx/blob/0f61aa58d66680c239ce43c8cdd453e7dc532bfc/httpx/_transports/default.py#L271
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Each SSLContext consumes more than 500kb of memory, since there is about one network per engine.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    In consequence, this class overrides all public methods
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    For reference: https://github.com/encode/httpx/issues/2298
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def __init__(self, *args, **kwargs):
 | 
				
			||||||
 | 
					        # pylint: disable=super-init-not-called
 | 
				
			||||||
 | 
					        # this on purpose if the base class is not called
 | 
				
			||||||
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    async def handle_async_request(self, request):
 | 
					    async def handle_async_request(self, request):
 | 
				
			||||||
        raise httpx.UnsupportedProtocol('HTTP protocol is disabled')
 | 
					        raise httpx.UnsupportedProtocol('HTTP protocol is disabled')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async def aclose(self) -> None:
 | 
				
			||||||
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async def __aenter__(self):
 | 
				
			||||||
 | 
					        return self
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async def __aexit__(
 | 
				
			||||||
 | 
					        self,
 | 
				
			||||||
 | 
					        exc_type=None,
 | 
				
			||||||
 | 
					        exc_value=None,
 | 
				
			||||||
 | 
					        traceback=None,
 | 
				
			||||||
 | 
					    ) -> None:
 | 
				
			||||||
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class AsyncProxyTransportFixed(AsyncProxyTransport):
 | 
					class AsyncProxyTransportFixed(AsyncProxyTransport):
 | 
				
			||||||
    """Fix httpx_socks.AsyncProxyTransport
 | 
					    """Fix httpx_socks.AsyncProxyTransport
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user