gpt4 book ai didi

python - 使用无限循环时 Blender 卡住

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

我正在使用客户端服务器架构,客户端位于 blender 上。

由于客户端必须无限等待来自服务器的文本,因此我使用了无限 while 循环。但是,Blender 在我运行脚本时卡住,它不会显示每个步骤中发生的任何事情,当我使用命令行手动结束执行时,它只显示执行的最后一步。

如果在 blender 外部运行,该脚本可以完美运行。我在 ubuntu 上使用 Blender 2.74。

有什么建议吗?

谢谢

最佳答案

您遇到的问题是每个基于事件的交互式应用程序的标准问题:输入事件并显示其响应发生在应用程序主事件循环中,其要点是

while(running) {
event = poll_event()
if( event ) {
dispatch_event(event)
}
redraw_window()
}

现在,当您在 Blender 中执行脚本时,这种情况会发生在 dispatch_event() 调用链“内部”的某个位置,以响应某些事件,例如您单击 UI 按钮或点击运行脚本热键,或者只是通过 Blender 执行您的脚本,因为它已被注册为某个东西的 Hook 。

只要循环在 dispatch_event() 中运行,主应用程序循环的执行就会停止,卡住程序的其余部分。

那么你能对此做什么:要么不在你的程序中实现这样的内部服务器循环,而是使用框架的方法来注册一个新事件并搭载在现有的事件循环上(在 Blender 中这被称为“模态 运算符”。或者,在您的情况下可能是首选,为您的服务器创建一个线程以与主事件循环同时运行.

另请参阅https://www.blender.org/api/blender_python_api_2_76_1/info_gotcha.html#can-i-redraw-during-the-script这与您的情况相关。

关于python - 使用无限循环时 Blender 卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32902676/

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