Python 如何使用ipywidgets fileupload上传大文件?

Python 如何使用ipywidgets fileupload上传大文件?,python,jupyter,ipywidgets,jupyterhub,Python,Jupyter,Ipywidgets,Jupyterhub,有一台带有Jupyterhub的服务器。它可以通过浏览器进行远程访问(仅限IP地址)。用户可以使用ipywidgets.fileupload上载大文件(数GB)。但我通常不能上传超过100MB的文件:大约200MB的文件上传10分钟。(scp命令-少于2分钟。)。超过250MB的文件-以内核错误结束(但带有“-debug”的jupyterhub没有显示任何内容) 浏览器控制台错误: API request failed (0): error :8000/user/aleksandr/api/co

有一台带有Jupyterhub的服务器。它可以通过浏览器进行远程访问(仅限IP地址)。用户可以使用ipywidgets.fileupload上载大文件(数GB)。但我通常不能上传超过100MB的文件:大约200MB的文件上传10分钟。(scp命令-少于2分钟。)。超过250MB的文件-以内核错误结束(但带有“-debug”的jupyterhub没有显示任何内容)

浏览器控制台错误:

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”功能

我使用:

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
  • python:3.7.3
  • jupyter核心:4.5.0
  • jupyter笔记本:6.0.0
  • 伊皮顿:7.6.1
  • ipykernel:5.1.1
  • ipywidgets:7.5.0
  • jupyterhub:1.0.0
一些动作:

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
根据这个:,我在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以正常速度上传大文件?

这个问题的解决方案在Jupyter社区仍然是一个悬而未决的问题。
但是有一个解决方法可用,即增加tornado支持的websocket消息大小


请参阅此项。

您找到问题的解决方案了吗?我也面临同样的问题。@Rustikal,我还没有找到解决办法。我现在不是在寻找解决办法。