随着python + ctypes + scipy nquad,内存不断增加

时间:2015-06-26 22:51:58

标签: python-3.x scipy ctypes

所以,我正在编写一些集成代码,并加快它尝试使用ctypes。但代码使用的内存不断增加最终耗尽(通过观看顶部和最终杀死我的脚本确认)。这是我到目前为止所得到的:

import numpy as np
import scipy.integrate as integrate
import ctypes 

lib=ctypes.CDLL('/path/to/testIntDist.so')

cFunc=lib.intBin
cFunc.restype=ctypes.c_double
cFunc.argtypes=(ctypes.c_int,ctypes.c_double)

def pyFunc(x1,x2,x3):
    x=(x1**x2)*np.log10(x3)
    return x

def intFunc(x1min,x1max,x2min,x2max,x3min,x3max):
    x=integrate.nquad(cFunc,[[float(x1min),float(x1max)],[float(x2min),float(x2max)],[float(x3min),float(x3max)]])[0]
    return x

line='1.0 1 1 1 1 0.1 0.111178446136 0.1 0.111178446136 3.0 3.1299027994'

for i in range(1,50000):
    x=list(line.split())
    res=intFunc(x[5],x[6],x[7],x[8],x[9],x[10])
    print(res)

testIntDist.c在哪里:

#include <stdlib.h>
#include <math.h>

double intBin(int n, double args[n]){
    double x1,x2,x3;
    x1=args[0];
    x2=args[1];
    x3=args[2];
    return pow(x1,x2)*log10(x3);
}

编译:

gcc -O2 -shared -fPIC -o testIntDist.so testIntDist.c -lm

代码版本:

gcc 4.6.3
python 3.2.3
scipy 0.15.1

如果我从cFunc切换到pyFunc(即函数的python版本),则内存使用率在运行期间保持不变。在调用cFunc释放内存后,我应该做些什么吗?

在print语句之后添加gc.collect()以强制进行垃圾回收,没有帮助。并使用memory_profiler

运行
Line #    Mem usage    Increment   Line Contents
================================================
    16   36.836 MiB    0.000 MiB   @profile
    17                             def intFunc(x1min,x1max,x2min,x2max,x3min,x3max):
    18   36.836 MiB    0.000 MiB    x=integrate.nquad(cFunc,[[float(x1min),float(x1max)],[float(x2min),float(x2max)],[float(x3min),float(x3max)]])[0]
    19   36.836 MiB    0.000 MiB    return x

似乎没有告诉我太多。

感谢。

0 个答案:

没有答案