Как запланировать регулярный запуск datalab ipynb - PullRequest
0 голосов
/ 22 сентября 2019

Я хочу запланировать, чтобы мои коды в файле ipynb (из Google Cloud Platform или GCP) запускались регулярно (скажем, 1 в день).Пожалуйста, помогите пролить свет на возможные обходные пути.Спасибо!

  • Я думаю, что облачный планировщик GCP или задания cron (cron.ysml) должны это делать, но я не уверен, как они работают точно.

Вот коды в моем ipynb (который работает нормально):

import requests
from bs4 import BeautifulSoup
import os
import io

url = "https://www.taiwanlottery.com.tw/lotto/superlotto638/history.aspx"
soup = BeautifulSoup(urllib.request.urlopen(url).read(),
                     features="html.parser", from_encoding='utf-8')

css_url = "https://www.taiwanlottery.com.tw/css1.css"

soup_css = BeautifulSoup(urllib.request.urlopen(
    css_url).read(), features="html.parser", from_encoding='utf-8')


table = soup.find("table", id="SuperLotto638Control_history1_dlQuery")

with io.open("superLottery.html", "w", encoding='utf-16') as f:
    f.write(unicode(table))
    f.write(unicode('<style type = "text/css">'))
    f.write(unicode(soup_css))
    f.write(unicode("</style>"))

!gsutil cp 'superLottery.html' 'gs://astral-petal-222508.appspot.com/datalab-backups/asia-east1-a/new-env'

1 Ответ

0 голосов
/ 27 сентября 2019

Я считаю, что планирование периодического прогона 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 , чтобы хотя бы понять некоторые концепции, к которым относится этот ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...