Running Multiple QtConsoles
You can run several qtconsole windows at once, each attached to a different kernel - one for data loading, one for modeling, one for a live experiment. Because each console binds to one kernel, the pattern is: manage kernels deliberately, then attach consoles to the ones you need.
Start Separate Kernels
jupyter kernel start
jupyter kernel start
jupyter kernels list
# 9f8e7d6c-... (kernel-1)
# 1a2b3c4d-... (kernel-2)
Attach One Console per Kernel
jupyter qtconsole --kernel=9f8e7d6c-... &
jupyter qtconsole --kernel=1a2b3c4d-... &
Label them mentally (or by window title): kernel 1 loads the dataset into big_df; kernel 2 fits models against it by importing the saved artifact.
Practical Patterns
- Loader / modeler split: one kernel holds the big data; other kernels run quick experiments without re-loading. Save shared results to parquet between them.
- Experiment isolation: each candidate model gets its own kernel, so a bad experiment cannot corrupt the baseline's state.
- Notebook + console pair: a notebook as the record, a console attached to the same kernel for ad-hoc poking.
Sharing State Between Consoles
Kernels do not share variables with each other - only with their own attached frontends. To pass data between two consoles, persist it:
# console 1
df.to_parquet("shared/features.parquet")
# console 2
import pandas as pd
df = pd.read_parquet("shared/features.parquet")
Cleanup
jupyter kernel list
jupyter kernel stop 9f8e7d6c-...
Stop kernels you no longer need; every running kernel consumes RAM, and long sessions accumulate several.
Summary
Run multiple qtconsole windows by starting separate kernels (jupyter kernel start) and attaching each console with --kernel=ID. Kernels keep state private to their own frontends, so pass data between consoles with files (parquet, pickle), and stop idle kernels with jupyter kernel stop to control memory use.