Providing multiuser with JupyterHub
Once Jupyter Notebooks were shared, it became obvious that the multiuser problem had to be solved. A new version of the Jupyter software was developed called JupyterHub. JupyterHub was specifically designed to handle multiple users, giving each user their own set of variables to work with. Actually, the system will give each user a whole new instance of the Jupyter software—a brute force approach, but it works.
When JupyterHub starts, it begins a hub or controlling agent. The hub will start an instance of a listener or proxy for Jupyter requests. When the proxy gets requests for Jupyter, it turns them over the the hub. If the hub decides this is a new user it will generate a new instance of the Jupyter server and attach all further interactions between that user and Jupyter to their own version of the server. Similarly, if the requesting user is already interacting with their own instance of Jupyter, it forwards the request off to their instance of Jupyter...