# 1) site_id_hook.py
from threading import local

SITE_THREAD_INFO = local()

class SiteIDHook:

    def __int__(self):        
        return SITE_THREAD_INFO.SITE_ID

    def __hash__(self):        
        return SITE_THREAD_INFO.SITE_ID

# 2) settings.py
.....
from site_id_hook import SiteIDHook, SITE_THREAD_INFO
SITE_ID = SiteIDHook()
....

# 3) site_middleware.py (simple middleware)

class SiteOnFlyDetectionMiddleware:    
    def process_request(self, request):
        sid = None
        host = request.META.get('HTTP_HOST')
        # ...
        #   any logic for `sid`
        #...
        settings.SITE_THREAD_INFO.SITE_ID = sid
           


Ok, now settings.SITE_ID will change in middleware on fly.