我的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,然后整个脚本完成没有错误或其他通知。你知道吗
所有这些让我觉得代码是并行执行的(多线程),但是没有正确处理这样的parallelizm。我想这可能与增强.python我构建的库在默认情况下是使用--threading=multi选项创建的。但是,尝试使用选项--threading=single重建不会产生任何效果,它仍然是作为多线程库构建的。这个posthttp://mail.python.org/pipermail/cplusplus-sig/2010-October/015771.html报告了类似的构建过程问题,但是没有得到回答。你知道吗
所以我的问题是如何建立boost库和增强.python尤其是单螺纹。或者,该问题可能与的单线程/多线程以外的内容有关增强.python图书馆。你知道吗
附加信息:我使用的是cygwin,boost_1.50.0,python2.6,我的操作系统是win7,带有多核CPU和nvidiavram(后两种硬件都支持多线程执行我的扩展而不让我知道)。你知道吗
你知道吗Boost.Python版本在Boost构建系统中往往是一个特例,因为它与为其构建Python的Python版本和配置相耦合。例如,如果Python是在没有调试的情况下构建的,那么Boost.Python版本即使Boost被明确告知构建一个调试变量,也将在不进行调试的情况下构建。我相信线程属性也是如此,因为它将通过包含
Python.h
间接地包含pyconfig.h
。你知道吗Python默认在单个线程中运行程序,而不管Python是否是使用线程支持构建的。Boost.Python版本不会改变此行为。作为一般的经验法则,线程只会成为Boost.Python版本当一个人想要并发的时候。例如,如果
my_ext.do_something()
要将一个大文件读入内存,那么最好在不持有lock on the interpreter的情况下执行读取。你知道吗考虑从扩展的简化实现开始,然后扩展它。例如,当我将
my_ext
构建为:我的测试脚本:
产生:
另一种方法是构建Python和Boost.Python版本,然后使用调试器逐步完成程序。有关调试构建的更多信息可以在here中找到。你知道吗
相关问题 更多 >
编程相关推荐