c++ - 使用线程在python中调用多个c++函数

标签 c++ python multithreading gil

假设我有一个接受整数的 C(++) 函数,它通过 python api 绑定(bind)到 (C)python,所以我可以从 python 调用它:

import c_module
c_module.f(10)

现在,我想将其并行化。问题是:在这种情况下 GIL 是如何工作的?假设我有一个要处理的数字队列,一些工作人员 (threading.Thread) 并行工作,每个工作人员都调用 c_module.f(number) 其中 number 取自队列。

与通常情况不同的是,当 GIL 锁定解释器时,现在您不需要解释器来计算 c_module.f,因为它已编译。所以问题是:在这种情况下处理真的是并行的吗?

最佳答案

当前执行明确发布 GIL 的 C 扩展代码的线程将并行运行。参见 http://docs.python.org/c-api/init.html#thread-state-and-the-global-interpreter-lock了解您需要在扩展程序中执行的操作。

Python 线程对于 I/O 绑定(bind)执行或 GUI 响应最有用。我不会用线程执行 python-heavy。如果您想要保证并行性,请查看 multiprocessing 库。

关于c++ - 使用线程在python中调用多个c++函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2822636/

相关文章:

c++ - 仅在(互斥)requires-clauses : legal or an ODR-violation? 中通过差异重载隐藏的 friend

python - 如何在Dask中写入Elastic db?

ios - 我可以限制iOS上NSOperation/线程的CPU使用率吗? [复制]

java - 在 Hadoop 集群中使用另一个类的静态变量

java - 在 Java 中停止线程?

通过 getter 访问的 C++ 类成员会产生垃圾,直接访问可以,但 std::cout 会干扰吗?

c++ - 用 C 或 C++ 编写引导加载程序?

python - 在递增的 for 循环中递减变量

python - 如何从 python 中的 wav 文件中删除静音期?

c++ - 需要 dll 入口点问题/建议