Как эффективно использовать многоядерность/многопоточность в Jupyter Notebook?
Добрый день! Мелкие скрипт-запросы пишу и запускаю в Jupyter-Notebook, все разные:
- вызовы API по сети
- алгоритмика (комбинирование элементов массива + оценка и выбор наилучшей комбинации
- поиск в файлах
- мат рассчеты (Numpy)
Если можно ускорить некоторые BLAS расчеты на видеокарте, то алгоритмику уже тяжелее. Но запуская тяжелые ЦПУ задачи часто видно, что загрузка современного многоядерного проца (у меня i5-10400) далеко от оптимальной. Есть ли версия Notebook-а, позволяющая запускать параллельно НЕСКОЛЬКО ячеек (ну и раскидывать их по ядрам и т.п. оптималить по процу). Я понимаю, что можно в параллель запустить несколько Jupyter серверов+несколько блокнотов запустить. Но это неудобно, да и делает невозможным совместное использование общих данных несколькими запущенными ячейками. Я понимаю про коллизии совместного доступа к одним и тем же данным из разных потоков, но мне нужны данные только на чтение, идеально было бы:
1) Получили данные снаружи
2) Предобработка
3) Запустили параллельно 4-5 ячеек (которые берут на вход неизменяемые в дальнейшем данные из предыдущего пункта).
Если Jupyter не умеет подобное, может другой ЯП + его блокнот умеет (Go, Kotlin ... ) ? Или есть что другое?