假设我有一个接受整数的 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/