在Python中线程C 程序
Threading a c++ program in python
我有一个用kivy编写的python应用程序,该应用程序使用C 程序进行高速计算,然后返回一个值,而我的Python应用程序使用了。
C 程序包裹在PYBIND11中并导入应用程序,然后从Python调用。
我的问题是当执行C 程序时,我的应用程序停止了一段时间,我仍然希望在后台进行事情。
我天真地认为这可以通过螺纹C 调用来解决,但是在第二个想法上,我认为问题在于GIL。我必须解锁吉尔,如何实现?
而无需看到任何代码,我只能推断出您的Python代码正在等待C 代码在执行其他任何操作之前完成。这可能意味着以下任务:
-
您没有在C 代码中解锁GIL
-
根据全球解释器锁(GIL) - 其他 - pybind11 2.2.3文档,使用
pybind
,应该这样完成:py::gil_scoped_release release; long_running_method(); py::gil_scoped_acquire acquire;
请注意,您需要GIL访问任何Python机械(包括返回结果)。因此,在发布之前,请确保将所需的所有数据从Python类型转换为C 类型。
-
-
您没有其他任何活动 python 线程,因此在进行C 调用时,没有其他python活动进行任何编程,以执行任何操作
相关文章:
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 试图创建一个多线程程序来查找0-100000000之间的总素数
- sigwait() 在多线程程序中不起作用
- 多线程程序中出现意外的内存泄漏
- 通过安装信号处理程序关闭多线程应用程序
- std::线程导致程序中止
- 如何在实时应用程序中锁定线程
- 多线程减慢程序速度:无错误共享,无互斥锁,无缓存未命中,无小工作量
- 如何在 MFC 应用程序中启动 ZeroMQ 线程?
- C++多线程程序:变量定义为类成员的隔离错误
- 多线程 gtkmm 应用程序最简单的示例
- 将数组作为多线程应用程序中函数的返回传递
- 在 API 和应用程序线程之间共享数据
- 多线程程序线程联接问题
- C++Win32 在低优先级模式下运行应用程序/线程
- 仅在守护程序线程返回后删除它
- 用户模式计划程序线程的最大数量
- std::线程实例计数不等于实际应用程序线程计数
- c++程序线程的概念
- CUDA5.0上下文管理,在多GPU环境中使用单个应用程序线程