我使用 boost.python 库构建的 python 扩展的行为非常奇怪。即,在这段代码中:
import my_ext
j = 0
while j<5:
print j
my_ext.do_something(j)
j = j + 1
我没有看到 j 被打印出来,而扩展代码 ( my_ext.do_something(j)
) 正在为不同的 j 做一些工作(比如说打印第 j 个文件)。此外,它只打印 j = 0 和 j = 1 的 2 个文件,然后整个脚本完成,没有错误或其他通知。
所有这一切让我觉得代码是并行执行的(多线程),但没有正确处理这种并行化。我想这可能与我构建的 boost.python 库默认使用 --threading=multi 选项有关。但是,尝试使用选项 --threading=single 进行重建不会产生任何效果,它仍然被构建为多线程库。这篇文章http://mail.python.org/pipermail/cplusplus-sig/2010-October/015771.html 报告了类似的构建过程问题,但没有得到答复。
所以我的问题是如何构建 boost 库和 boost.python 特别是单线程的。或者,问题可能与 boost.python 库的单/多线程以外的其他问题有关。
附加信息:我正在使用 cygwin、boost_1.50.0、python2.6,我的操作系统是 Win 7,具有多核 CPU 和 nvidia vram(后一种硬件可能支持我的扩展程序的多线程执行而不让我知道)。