我尝试使用cuda作为backend,使用ggui写了一个3d的渲染脚本,然后我想将其集成到pyqt5写的gui中。当我将渲染脚本作为子线程创建之后和pyqt5的窗口进行双窗口展示,尽管我还没有让两个线程进行数据通信,当结束这两个线程的时候依然会出现cuda上下文问题,不知道这是为什么
报错如下
[Taichi] Starting on arch=cuda
[E 08/02/25 11:55:35.910 19948] [taichi/rhi/cuda/cuda_driver.h:taichi::lang::CUDADriverFunction<void *>::operator ()@92] CUDA Error CUDA_ERROR_INVALID_CONTEXT: invalid device context while calling stream_synchronize (cuStreamSynchronize)
我写的代码主要部分如下
#主函数
def main():
# 创建应用程序
app = QApplication(sys.argv)
# 创建通信队列和信号
command_queue = Queue()
signals = CommunicationSignals()
# 创建PyQt控制面板
control_panel = PyQtControlPanel(command_queue)
# 连接信号
signals.model_loaded.connect(control_panel.on_model_loaded)
signals.vertex_selected.connect(control_panel.on_vertex_selected)
signals.camera_updated.connect(control_panel.on_camera_updated)
# 显示控制面板
control_panel.show()
# 创建并启动Taichi渲染线程
def taichi_thread_func():
# 在线程内初始化Taichi
ti.init(arch=ti.cuda)
renderer = TaichiGGUIRenderer(800, 600, command_queue, signals)
renderer.run()
taichi_thread = threading.Thread(target=taichi_thread_func)
taichi_thread.daemon = True # 设置为守护线程,这样主线程退出时会自动终止
taichi_thread.start()
# 运行应用程序
sys.exit(app.exec_())
if __name__ == "__main__":
main()