在Python中使用线程调用多个C++函数

3 投票
1 回答
1110 浏览
提问于 2025-04-15 22:38

假设我有一个C(++)函数,它接收一个整数,并通过Python的API与(C)python绑定,这样我就可以在Python中调用它:

import c_module
c_module.f(10)

现在,我想让这个函数能够并行处理。问题是:在这种情况下,全局解释器锁(GIL)是怎么工作的?假设我有一个需要处理的数字队列,还有一些工作线程(threading.Thread)在并行工作,每个线程都从队列中取出一个数字,然后调用c_module.f(number)

与通常的情况不同,通常是GIL锁住了解释器,而现在你不需要解释器来执行c_module.f,因为它是编译过的。那么问题是:在这种情况下,处理真的可以并行进行吗?

1 个回答

4

当前正在执行C扩展代码的线程,如果显式释放了全局解释器锁(GIL),就可以并行运行。想了解在你的扩展中需要做什么,可以查看这个链接:http://docs.python.org/c-api/init.html#thread-state-and-the-global-interpreter-lock

Python的线程最适合用在需要处理输入输出的场景,或者让图形界面更流畅。对于需要大量计算的任务,我不建议使用线程。如果你想要确保能真正实现并行处理,可以看看multiprocessing这个库。

撰写回答