传输大数据时,CEFPython窗口关闭,没有警告

2024-05-20 20:46:09 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这是我的代码:

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方面,我有:

^{pr2}$

下面是终端打印出来的所有信息:

[0312/104311.439:INFO:cefpython_app.cpp(199)] [Browser process] OnBeforeChildProcessLaunch() command line: "<>\Anaconda3\lib\site-packages\cefpython3\subprocess" --type=gpu-process --no-sandbox --locales-dir-path="<>\Anaconda3\lib\site-packages\cefpython3\locales" --log-file=debug.log --log-severity=info --resources-dir-path="<>\Anaconda3\lib\site-packages\cefpython3" --lang=en-US --disable-gpu-shader-disk-cache /prefetch:2

[0312/104311.440:INFO:cef_log.cpp(8)] [Browser process] Switch already set, ignoring: disable-gpu-shader-disk-cache

[0312/104311.440:INFO:cefpython_app.cpp(199)] [Browser process] OnBeforeChildProcessLaunch() command line: "<>\Anaconda3\lib\site-packages\cefpython3\subprocess" --type=gpu-process --no-sandbox --locales-dir-path="C:\Users\Xiangyun\Anaconda3\lib\site-packages\cefpython3\locales" --log-file=debug.log --log-severity=info --resources-dir-path=" <>\Anaconda3\lib\site-packages\cefpython3" --lang=en-US --disable-gpu-shader-disk-cache --gpu-preferences=KAAAAAAAAACAA4CAAQAAAAAAAAAAAGAAEAAAAAAAAAAAAAAAAAAAACgAAAAEAAAAIAAAAAAAAAAoAAAAAAAAADAAAAAAAAAAOAAAAAAAAAAQAAAAAAAAAAAAAAAKAAAAEAAAAAAAAAAAAAAACwAAABAAAAAAAAAAAQAAAAoAAAAQAAAAAAAAAAEAAAALAAAA --locales-dir-path="<>\Anaconda3\lib\site-packages\cefpython3\locales" --log-file=debug.log --log-severity=info --resources-dir-path="<>\Anaconda3\lib\site-packages\cefpython3" --lang=en-US /prefetch:2

[0312/104311.473:INFO:cef_log.cpp(8)] [Browser process] CreateBrowserSync() called

DevTools listening on ws://127.0.0.1:59232/devtools/browser/abaff316-3b5c-4647-8af3-c7c521146d08 [0312/104311.473:INFO:cef_log.cpp(8)] [Browser process] navigateUrl: file://///<>/index_cefpython.html

[0312/104311.475:INFO:cef_log.cpp(8)] [Browser process] CefBrowser::CreateBrowserSync()

[0312/104311.493:INFO:cef_log.cpp(8)] [Browser process] GetPyBrowser(): create new PyBrowser, browserId=1

[0312/104311.516:INFO:cefpython_app.cpp(199)] [Browser process] OnBeforeChildProcessLaunch() command line: "<>\Anaconda3\lib\site-packages\cefpython3\subprocess" --type=renderer --no-sandbox --service-pipe-token=C31AF08C64F1883299C21D068EF5263C --lang=en-US --locales-dir-path=<>\Anaconda3\lib\site-packages\cefpython3\locales" --log-file=debug.log --log-severity=info --resources-dir-path="<>\Anaconda3\lib\site-packages\cefpython3" --disable-gpu-shader-disk-cache /prefetch:1

[0312/104311.528:INFO:cef_log.cpp(8)] [Browser process] GetPyFrame(): underlying frame does not yet exist: browserId = 1, frameId = -4

[0312/104311.529:INFO:cef_log.cpp(8)] [Browser process] GetPyFrame(): underlying frame does not yet exist: browserId = 1, frameId = -4

[0312/104311.531:INFO:cef_log.cpp(8)] [Browser process] CefBrowser::CreateBrowserSync() succeeded

[0312/104311.532:INFO:cef_log.cpp(8)] [Browser process] CefBrowser window handle = 595526

[0312/104311.533:INFO:cef_log.cpp(8)] [Browser process] GetPyFrame(): underlying frame does not yet exist: browserId = 1, frameId = -4

[0312/104311.534:INFO:cef_log.cpp(8)] [Browser process] SendProcessMessage(): message=DoJavascriptBindings, arguments size=1

[0312/104311.534:INFO:cef_log.cpp(8)] [Browser process] MessageLoop()

[0312/104311.612:INFO:client_handler.cpp(40)] [Browser process] OnProcessMessageReceived(): OnContextCreated

[0312/104311.613:INFO:cef_log.cpp(8)] [Browser process] V8ContextHandler_OnContextCreated()

[0312/104311.614:INFO:cef_log.cpp(8)] [Browser process] GetPyFrame(): create new PyFrame, frameId=2


Tags: pathbrowserinfologlibpackagessitecef
1条回答
网友
1楼 · 发布于 2024-05-20 20:46:09

Javascript bindinsgs不应用于传输大数据。要发送大数据,请改用http请求。基本上要么使用AJAX请求并运行一个内部的应用内web服务器,要么使用资源处理程序,允许在不运行web服务器的情况下处理请求。在

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

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

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

检查你的应用程序在发送数据时的内存峰值。在Linux上使用process monitor,在Windows上使用process manager。在

要找出发送200 MB数据时失败的原因,请调试应用程序以获取堆栈跟踪。如果使用Linux,则下载利伯塞夫带有来自发布页面的调试符号,例如v66上游。替换原件利伯塞夫在头孢吡酮3包装里。可以在此处找到GDB命令:

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

相关问题 更多 >