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

时间:2010-05-12 20:45:50

标签: c++ python multithreading gil

假设我有一个带有整数的C(++)函数,并且它与python api绑定到(C)python,所以我可以从python中调用它:

import c_module
c_module.f(10)

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

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

1 个答案:

答案 0 :(得分:3)

当前正在执行明确释放GIL的C扩展代码的线程将并行运行。有关您在扩展程序中需要执行的操作,请参阅http://docs.python.org/c-api/init.html#thread-state-and-the-global-interpreter-lock

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