相关疑难解决方法(0)

我如何使用子进程强制python释放内存?

我正在阅读Python内存管理,并希望减少我的应用程序的内存占用.有人建议,子程序在减轻问题方面会有很长的路要走; 但我无法概念化需要做什么.有人可以提供一个简单的例子来说明如何...

def my_function():
    x = range(1000000)
    y = copy.deepcopy(x)
    del x
    return y

@subprocess_witchcraft
def my_function_dispatcher(*args):
    return my_function()
Run Code Online (Sandbox Code Playgroud)

...进入一个真正的子处理函数,不存储额外的"自由列表"?

奖金问题:

这个"自由列表"概念是否也适用于python c-extensions?

python subprocess memory-management python-2.7

22
推荐指数
1
解决办法
6276
查看次数

使用TensorFlow进行内存泄漏

我有TensorFlow的内存泄漏.我提到Tensorflow:即使在关闭Session时内存泄漏?为了解决我的问题,我按照答案的建议,似乎解决了这个问题.但它在这里不起作用.

为了重新创建内存泄漏,我创建了一个简单的例子.首先,我使用这个函数(我在这里:如何在Python中获取当前的CPU和RAM使用?)来检查python进程的内存使用情况:

def memory():
    import os
    import psutil
    pid = os.getpid()
    py = psutil.Process(pid)
    memoryUse = py.memory_info()[0]/2.**30  # memory use in GB...I think
    print('memory use:', memoryUse)
Run Code Online (Sandbox Code Playgroud)

然后,每次调用该build_model函数时,内存的使用都会增加.

这是build_model具有内存泄漏的函数:

def build_model():

    '''Model'''

    tf.reset_default_graph()


    with tf.Graph().as_default(), tf.Session() as sess:
        tf.contrib.keras.backend.set_session(sess)

        labels = tf.placeholder(tf.float32, shape=(None, 1))
        input = tf.placeholder(tf.float32, shape=(None, 1))

        x = tf.contrib.keras.layers.Dense(30, activation='relu', name='dense1')(input)
        x1 = tf.contrib.keras.layers.Dropout(0.5)(x)
        x2 = tf.contrib.keras.layers.Dense(30, activation='relu', name='dense2')(x1)
        y = tf.contrib.keras.layers.Dense(1, activation='sigmoid', name='dense3')(x2)


        loss = tf.reduce_mean(tf.contrib.keras.losses.binary_crossentropy(labels, y))

        train_step = …
Run Code Online (Sandbox Code Playgroud)

python memory memory-leaks keras tensorflow

14
推荐指数
1
解决办法
8647
查看次数

Process.join()和队列不适用于大数字

我试图拆分循环即

N = 1000000
for i in xrange(N):
    #do something
Run Code Online (Sandbox Code Playgroud)

使用multiprocessing.Process并且它适用于N的小值.当我使用更大的N值时会出现问题.在p.join()之前或期间发生奇怪的事情并且程序没有响应.如果我把print i,而不是q.put(i)放在函数f的定义中,一切都运行良好.

我将不胜感激任何帮助.这是代码.

from multiprocessing import Process, Queue

def f(q,nMin, nMax): # function for multiprocessing
    for i in xrange(nMin,nMax):
        q.put(i)

if __name__ == '__main__':

    nEntries = 1000000

    nCpu = 10
    nEventsPerCpu = nEntries/nCpu
    processes = []

    q = Queue()

    for i in xrange(nCpu):
        processes.append( Process( target=f, args=(q,i*nEventsPerCpu,(i+1)*nEventsPerCpu) ) )

    for p in processes:
        p.start()

    for p in processes:
        p.join()

    print q.qsize()
Run Code Online (Sandbox Code Playgroud)

python python-2.7 python-multiprocessing

8
推荐指数
1
解决办法
5136
查看次数