首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CEFPython窗口在传输大数据时不加警告地关闭

CEFPython窗口在传输大数据时不加警告地关闭
EN

Stack Overflow用户
提问于 2019-03-12 14:49:43
回答 1查看 546关注 0票数 1

我正在尝试创建这个python绑定到我创建的一个电子应用程序,其中python部分用于分析数据,结果( python字典)被传递到web浏览器以进行可视化。对于少量的数据来说,这一切都很有魅力,但是当我试图传递一个大的结果字典(~200 on )时,窗口被创建了,但是在终端中却在没有警告的情况下关闭了(我无法检查devtool),尽管后端似乎有一个子进程在继续运行。这个问题发生在windows和Ubuntu机器上,我非常感谢您的帮助。

这是我的代码:

代码语言:javascript
复制
def view(data):

config = data

settings = {
    "debug": True,
    "log_severity": cef.LOGSEVERITY_INFO,
    "log_file": "debug.log",
}
cef.Initialize(settings=settings)
browser_setting = { "file_access_from_file_urls_allowed":True,\
                "universal_access_from_file_urls_allowed": True,\
                "web_security_disabled":True}
browser = cef.CreateBrowserSync(url='file://' + os.path.realpath("index_cefpython.html"),
                                window_title="Javascript Bindings", settings = browser_setting)
browser.SetClientHandler(LoadHandler(config))
bindings = cef.JavascriptBindings()
browser.SetJavascriptBindings(bindings)
cef.MessageLoop()
del browser
cef.Shutdown()

return 


class LoadHandler(object):

def __init__(self, config):
    self.config = config
def OnLoadEnd(self, browser, **_):
    browser.ExecuteFunction("defineData", self.config)

在JS方面,我有:

代码语言:javascript
复制
<script type="text/javascript">
    function defineData(datainput){             

    console.log("start")
    data = datainput;

    Main();
    }
</script>

这是终端上打印出来的所有信息:

0312/104311.439:INFO:cefpython_app.cpp(199) OnBeforeChildProcessLaunch()命令行:--locales-dir-path="<>\Anaconda3\lib\site-packages\cefpython3\locales“-type=gpu-process-no-sandbox--locales-dir-path=”<>\Anaconda3\lib\site-packages\cefpython3\locales“-log-file=调试器日志-log-严重性=info --resources-dir-path="<>\Anaconda3\lib\site-packages\cefpython3”-lang=en-US-禁用-GPU-着色器-磁盘-缓存/prefetch:2 0312/104311.440:INFO:cef_log.cpp(8)开关已经设置,忽略:禁用-gpu-着色器-磁盘缓存 0312/104311.440:INFO:cefpython_app.cpp(199) OnBeforeChildProcessLaunch()命令行:--locales-dir-path="C:\Users\Xiangyun\Anaconda3\lib\site-packages\cefpython3\locales“-type=gpu-process-no-sandbox--locales-dir-path=”C:\Users\Xiangyun\Anaconda3\lib\site-packages\cefpython3\locales“-log-file=调试器日志-日志-严重性=信息-资源-dir-path=”<>Anaconda3 3\lib\lib站点-packages\cefpython 3“-lang=en-US-禁用-gpu-着色器-磁盘-缓存--gpu-preferences=KAAAAAAAAACAA4CAAQAAAAAAAAAAAGAAEAAAAAAAAAAAAAAAAAAAACgAAAAEAAAAIAAAAAAAAAAoAAAAAAAAADAAAAAAAAAAOAAAAAAAAAAQAAAAAAAAAAAAAAAKAAAAEAAAAAAAAAAAAAAACwAAABAAAAAAAAAAAQAAAAoAAAAQAAAAAAAAAAEAAAALAAAA --locales-dir-path="<>\Anaconda3\lib\site-packages\cefpython3\locales“-日志-文件=调试器日志-日志严重性=info --resources-dir-path="<>\Anaconda3\lib\site-packages\cefpython3”-lang=en-US /prefetch:2 0312/104311.473:INFO:cflog.cpp(8) CreateBrowserSync()调用 收听ws://127.0.0.1:59232/devtools/browser/abaff316-3b5c-4647-8af3-c7c521146d08 0312/104311.473的DevTools :INFO:cflog.cpp(8) navigateUrl: file://///<>/index_cefpython.html 0312/104311.475:INFO:cflog.cpp(8) CefBrowser::CreateBrowserSync() 0312/104311.493:INFO:cflog.cpp(8) GetPyBrowser():创建新的PyBrowser,browserId=1 0312/104311.516:INFO:cefpython_app.cpp(199) OnBeforeChildProcessLaunch()命令行:--service-pipe-token=C31AF08C64F1883299C21D068EF5263C -type=renderer --no-sandbox --service-pipe-token=C31AF08C64F1883299C21D068EF5263C-lang=en-US --locales-dir-path=<>\Anaconda3\lib\site-packages\cefpython3\locales“-log-file=spg.log-log-OnBeforeChildProcessLaunch=info --resources-dir-path="<>\Anaconda3\lib\site-packages\cefpython3”---resources-dir-path=“<>\Anaconda3\lib\site-packages\cefpython3”---resources-dir-path=“<>\Anaconda3\lib\site-packages\cefpython3”着色器-磁盘缓存/prefetch:1 0312/104311.528:INFO:cflog.cpp(8) GetPyFrame():基础框架还不存在: browserId = 1,frameId = -4 0312/104311.529:INFO:cflog.cpp(8) GetPyFrame():基础框架还不存在: browserId = 1,frameId = -4 0312/104311.531:INFO:cflog.cpp(8) CefBrowser::CreateBrowserSync()已成功 0312/104311.532:INFO:cflog.cpp(8) CefBrowser窗口句柄= 595526 0312/104311.533:INFO:cflog.cpp(8) GetPyFrame():基础框架还不存在: browserId = 1,frameId = -4 0312/104311.534:INFO:cflog.cpp(8) SendProcessMessage():message=DoJavascriptBindings,参数size=1 0312/104311.534:INFO:cflog.cpp(8) MessageLoop() 0312/104311.612:INFO:client_handler.cpp(40) OnProcessMessageReceived():OnContextCreated 0312/104311.613:INFO:cflog.cpp(8) V8ContextHandler_OnContextCreated() 0312/104311.614:INFO:cflog.cpp(8) GetPyFrame():创建新的PyFrame,frameId=2

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-12 15:57:27

不应使用Javascript bindinsgs来传输大数据。要发送大数据,请使用http请求。基本上,要么使用AJAX请求并运行内部应用程序内web服务器,要么使用资源处理程序( Resource )来处理请求,而无需运行web服务器。

请参阅教程文档> "Javascript集成“>”使用http请求进行通信“部分(单击链接后向下滚动):

https://github.com/cztomczak/cefpython/blob/master/docs/Tutorial.md#javascript-integration

您可以尝试使用javacript绑定以较小的部分发送数据,但是使用请求将更好地执行。

检查你的应用程序内存在发送数据时是如何飙升的。在Linux上使用进程监视器,在Windows上使用进程管理器。

若要找出发送200 MB数据时失败的原因,请调试应用程序以获取堆栈跟踪。如果使用Linux,那么从发布页面下载带有调试符号的libcef.so,例如v66-上游。将cefpython3包中的原始cefpython3替换为该包。在这里可以找到GDB命令:

https://github.com/cztomczak/cefpython/blob/master/docs/Knowledge-Base.md#python-crashes-with-segmentation-fault---how-to-debug

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55124371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档