Как загрузить большой файл, используя загрузку файла ipywidgets? - PullRequest
0 голосов
/ 29 сентября 2019

Есть сервер с Jupyterhub. Имеет удаленный доступ через браузер (ТОЛЬКО IP-адрес). Пользователь может загружать большие файлы (несколько ГБ) с помощью ipywidgets.fileupload. Но я обычно не могу загружать файлы более 100 МБ: файлы с загрузкой около 200 МБ ~ 10 минут. (команда scp - менее 2 минут.). Файлы больше 250 МБ - заканчиваются ошибкой ядра (но jupyterhub с «--debug» ничего не показывает).

Ошибка консоли браузера:

API request failed (0): error
:8000/user/aleksandr/api/contents/Untitled1.ipynb:1 Failed to load resource: net::ERR_EMPTY_RESPONSE
main.min.js?v=eef572336006937e9a017afbdebc65fe:24805 Uncaught (in promise) XhrError: error
    at wrap_ajax_error (http://192.168.1.49:8000/user/aleksandr/static/notebook/js/main.min.js?v=eef572336006937e9a017afbdebc65fe:24805:29)
    at Object.settings.error (http://192.168.1.49:8000/user/aleksandr/static/notebook/js/main.min.js?v=eef572336006937e9a017afbdebc65fe:24861:24)
    at u (http://192.168.1.49:8000/user/aleksandr/static/notebook/js/main.min.js?v=eef572336006937e9a017afbdebc65fe:2:27457)
    at Object.fireWith [as rejectWith] (http://192.168.1.49:8000/user/aleksandr/static/notebook/js/main.min.js?v=eef572336006937e9a017afbdebc65fe:2:28202)
    at k (http://192.168.1.49:8000/user/aleksandr/static/notebook/js/main.min.js?v=eef572336006937e9a017afbdebc65fe:2:77676)
    at XMLHttpRequest.<anonymous> (http://192.168.1.49:8000/user/aleksandr/static/notebook/js/main.min.js?v=eef572336006937e9a017afbdebc65fe:2:79882)
wrap_ajax_error @ main.min.js?v=eef572336006937e9a017afbdebc65fe:24805
settings.error @ main.min.js?v=eef572336006937e9a017afbdebc65fe:24861
u @ main.min.js?v=eef572336006937e9a017afbdebc65fe:2
fireWith @ main.min.js?v=eef572336006937e9a017afbdebc65fe:2
k @ main.min.js?v=eef572336006937e9a017afbdebc65fe:2
(anonymous) @ main.min.js?v=eef572336006937e9a017afbdebc65fe:2

Некоторый исходный код:

import ipywidgets as widgets

def ff(b):
    s.style.button_color = "yellow"
    for elem in b.new.values():
        print(elem['metadata']['name'])
        with open(elem['metadata']['name'], 'wb') as file:
            file.write( elem['content'])
        print("Done")
    s.style.button_color = "lightgreen"

s = widgets.FileUpload(
    accept='',  # Accepted file extension e.g. '.txt', '.pdf', 'image/*', 'image/*,.pdf'
    multiple=True  # True to accept multiple files upload else False
)
s.style.button_color = "lightgreen"
s.observe(ff, names='value')
s

При замораживании функция "ff" не выполняется.

Я использую:

  • python: 3.7.3
  • jupyter core: 4.5.0
  • jupyter-notebook: 6.0.0
  • ipython: 7.6.1
  • ipykernel: 5.1.1
  • ipywidgets: 7.5.0
  • jupyterhub: 1.0.0

Некоторые действия:

Согласно этому: https://github.com/jupyter-widgets/ipywidgets/issues/2522, Я изменил в jupyer_config.py:

c.Spawner.args=['--SingleUserNotebookApp.tornado_settings = {"websocket_max_message_size": 1073741824}']

Выполнение при запуске ноутбука пользователя. И:

c.JupyterHub.tornado_settings= {"websocket_max_message_size": 1073741824}}

В общем, изменение этих полей не повлияло на состояние проблемы.

Можно ли загружать большие файлы с нормальной скоростью через ipywidgets.fileupload?

...