gpt4 book ai didi

multithreading - 如何在将现有对象传递到该控制台的同时在我的应用程序中生成 IPython qtconsole

转载 作者:行者123 更新时间:2023-12-04 06:42:01 24 4
gpt4 key购买 nike

我试图在我的应用程序中嵌入一个 IPython qtconsole,以类似于我可以嵌入一个 IPython 文本控制台的方式,因此:

from IPython.frontend.terminal.embed import InteractiveShellEmbed
myobj={'jason':10}
shell = InteractiveShellEmbed()
shell.user_ns = myobj
shell()

我可以使用以下命令在我的应用程序中启动 QT 控制台
from IPython.frontend.qt.console.qtconsoleapp import IPythonQtConsoleApp
app = IPythonQtConsoleApp()
app.initialize()
app.start()

但这无法访问现有对象。

我可以在我的应用程序中启动一个可以访问现有对象的内核,使用:
import IPython
myobj={'jason':10}
IPython.embed_kernel(local_ns=myobj)
#No more code executes

然后使用连接到它
ipython qtconsole --existing

或者,在另一个 python 脚本中:
from IPython.lib.kernel import find_connection_file
from IPython.frontend.qt.console.qtconsoleapp import IPythonQtConsoleApp

cf=find_connection_file("*")
app = IPythonQtConsoleApp(existing=cf[-1])
app.initialize()
app.start()

但这些都不是单一的解决方案,都需要另一个 shell 。内核在一个不会让步的线程中运行,因此在内核存在之前不会执行更多代码。

所以,我的问题是,如何在一个脚本中实现上述目标?

我试过使用线程和多处理,但作为 embed_kernel() 永远不会返回,显然必须在 之前运行IPythonQTConsoleApp() 或者连接文件会丢失,我不知道如何管理它。

附注代表 >1000 的人请添加 qtconsole 标签。

最佳答案

要在不阻塞的情况下嵌入内核,请查看 this example来自 IPython 存储库。 IPython 知道将自身与 Qt 事件循环集成的一些巧妙技巧,因此您可以同时运行控制台和应用程序。对于交互式调试之类的事情,这是要走的路。

如果您需要将控制台嵌入到您自己的应用程序中,我们提供 just merged进程内内核。看看this example .在下一个版本发布之前,您需要使用 IPython 开发版本,但最好能进行一些早期测试。

关于multithreading - 如何在将现有对象传递到该控制台的同时在我的应用程序中生成 IPython qtconsole,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14376469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com