How to use the asgiref.sync.AsyncToSync.launch_map.get function in asgiref

To help you get started, we’ve selected a few asgiref examples, based on popular ways it is used in public projects.

Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.

github django / asgiref / asgiref / View on Github external
def thread_handler(self, loop, source_task, exc_info, func, *args, **kwargs):
        Wraps the sync application with exception handling.
        # Set the threadlocal for AsyncToSync
        self.threadlocal.main_event_loop = loop
        # Set the task mapping (used for the locals module)
        current_thread = threading.current_thread()
        if AsyncToSync.launch_map.get(source_task) == current_thread:
            # Our parent task was launched from this same thread, so don't make
            # a launch map entry - let it shortcut over us! (and stop infinite loops)
            parent_set = False
            self.launch_map[current_thread] = source_task
            parent_set = True
        # Run the function
            # If we have an exception, run the function inside the except block
            # after raising it so exc_info is correctly populated.
            if exc_info[1]:
                    raise exc_info[1]
                    return func(*args, **kwargs)