Python cython:按顺序运行prange(分析/调试)

Python cython:按顺序运行prange(分析/调试),python,python-3.x,debugging,parallel-processing,cython,Python,Python 3.x,Debugging,Parallel Processing,Cython,我有一个相当大的代码库,主要是用Cython编写的。同时,我已经开始将它并行化,用“prange”代替“range”。(到目前为止,或多或少都是随机的,因为我仍然需要培养一种直觉,即我从中真正获益的地方和获益不多的地方。) 分析/调试时出现了一个我还没有找到答案的大问题: 是否有办法在全局或本地级别关闭并行化(即按顺序运行“prange”? 全局开关是最方便的,但即使有一个本地解决方案,至少应该允许我自己实现一个全局开关 以防万一:我正在使用Python 3(目前为3.4.5)。至少有三种非常简

我有一个相当大的代码库,主要是用Cython编写的。同时,我已经开始将它并行化,用“prange”代替“range”。(到目前为止,或多或少都是随机的,因为我仍然需要培养一种直觉,即我从中真正获益的地方和获益不多的地方。)

分析/调试时出现了一个我还没有找到答案的大问题:

是否有办法在全局或本地级别关闭并行化(即按顺序运行“prange”?

全局开关是最方便的,但即使有一个本地解决方案,至少应该允许我自己实现一个全局开关


以防万一:我正在使用Python 3(目前为3.4.5)。

至少有三种非常简单的方法:

  • prange
    接受一个
    num\u threads
    参数。将其设置为1。这使您可以进行本地控制

  • 如果不使用OpenMP进行编译,它仍将运行,但不会并行运行。从setup.py中删除
    extra\u compile\u args=['-fopenmp']
    extra\u link\u args=['-fopenmp']
    (或等效文件)。(OpenMP是根据
    #pragmas
    实现的,因此在没有编译器支持的情况下会被忽略)。这为您提供了一个简单的全局切换

  • OpenMP
    OMP\u NUM\u线程
    。在操作系统中将其设置为1,然后运行cython程序。这将提供一个全局开关(无需重新编译)


  • 至少有三种非常简单的方法:

  • prange
    接受一个
    num\u threads
    参数。将其设置为1。这使您可以进行本地控制

  • 如果不使用OpenMP进行编译,它仍将运行,但不会并行运行。从setup.py中删除
    extra\u compile\u args=['-fopenmp']
    extra\u link\u args=['-fopenmp']
    (或等效文件)。(OpenMP是根据
    #pragmas
    实现的,因此在没有编译器支持的情况下会被忽略)。这为您提供了一个简单的全局切换

  • OpenMP
    OMP\u NUM\u线程
    。在操作系统中将其设置为1,然后运行cython程序。这将提供一个全局开关(无需重新编译)