3

假设我有一个采用整数的 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,因为它是编译的。所以问题是:在这种情况下,处理真的是并行的吗?

4

1 回答 1

4

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

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

于 2010-05-12T22:18:28.240 回答