Я считаю, что планирование периодического прогона ipython
notebook
из Cloud Datalab может быть слишком большим количеством анти-паттерна, чтобы его поощрять.
jupyter «сервер» работает внутри контейнера на экземпляре виртуальной машины Compute Engine .
На первый взгляд можно надеяться достичь этого, превратив «ноутбук» в обычный *Модуль 1013 * Python , а затем запустить его удаленно, проблема в зависимостях сторонних библиотек, которые могут у вас быть.
Даже если нет никаких зависимостей, необходимое программное обеспечение для преобразования notebook
не установлено на образ container
, поэтому его нужно устанавливать на каждомзапуск между перезапусками экземпляра.
Вы также можете преобразовать его «сами», и хотя это не гарантирует успешной работы в каждом случае, как более глубокое исследование того, каков формат notebook
s (даже если первыйвзгляд не кажется слишком сложным), ниже я покажу, как это сделать.
Итак, давайте направим исходный код notebook
во встроенную функцию exec
загрузите наши зависимости, чтобы наш вызов exec
выполнялся успешно.
Все это удаленно, через datalab container
, работающий на экземпляре VM .
$ project= #TODO edit
$ zone= #TODO edit
$ instance= #TODO edit
$ gcloud compute ssh $instance --project $project --zone $zone -- docker exec datalab python '-c """
import json
import imp
#TODO find a better way and not escape quote characters?...
bs4 = imp.load_package(\"bs4\", \"/usr/local/envs/py2env/lib/python2.7/site-packages/bs4\")
BeautifulSoup = bs4.BeautifulSoup
notebook=\"/content/datalab/notebooks/notebook0.ipynb\"
source_exclude = (\"from bs4 import BeautifulSoup\")
with open(notebook) as fp:
source = \"\n\".join(line for cell in json.load(fp)[\"cells\"] if cell[\"cell_type\"]==\"code\" for line in cell[\"source\"] if line not in source_exclude)
#print(source)
exec(source)
"""
'
До сих пор я не мог найти другой способ не убежать от персонажей, так как мой опыт bash
невелик.
Вы тоже, по крайней мере,получить предупреждения, связанные с отсутствием некоторых зависимостей библиотек imp.load_package
.Это напоминает нам о том, что этот подход вообще не масштабируется.
Я не знаю, что вы об этом думаете, но, возможно, лучше иметь исходный код Python , который вы хотите запустить Облачная функция и затем активируйте эту функцию с помощью Облачный планировщик .Посмотрите этот пример сообщества .
Я считаю, что разумный вывод из этого поста состоит в том, что notebook
может иметь другие варианты использования, чем Python module
.
Кроме того, обязательно изучите документацию Cloud Datalab , чтобы хотя бы понять некоторые концепции, к которым относится этот ответ.