First time here? Check out the FAQ!

Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

asked 0 years ago

nur_hamid gravatar image

Problem in memory usage when loading file (Memory leak?)

I need to get coefficients of some polynomials save in my disk. However, the memory usage is increasing in each iteration although garbage collector is used. Here is my program. The memory looks increasing in the command pol = load(f"{foldername}pp{2}.sobj")

def get_co(filename, Mon):
     pol = load(filename)
     co = [pol.coefficient(m) for m in Mon]
     del pol
     gc.collect()
    return co


def load_monomials(n):
    foldername = f"mult/p{n}/"
    diname = f"mon/di{n}"
    os.makedirs(diname, exist_ok=True)  # Ensure directory exists

    k = 0
    filename = f"{foldername}pp{k}.sobj"

    # Take set of monomials with different coefficients
    Mon = set()
    # Call the polynomials of index 2 (we want random, but not 0 actually)
    pol = load(f"{foldername}pp{2}.sobj")

    print("Taking the monomials with different coefficients")
    Co = set()
    for mon in pol.monomials():
        coe = pol.coefficient(mon)
        if coe not in Co:
            Co.add(coe)
            Mon.add(mon)
    print("The length of monomials is", len(Mon))

    while os.path.exists(filename):
        print(f"Loading {filename}...")
        coname = f"{diname}/co{k}.sobj"       

        co = get_co(filename, Mon)
        save(co, coname)

        # Explicitly dereference
        del co
        gc.collect()

        print(f"Memory usage: {get_memory_usage()} MB, GC stats: {gc.get_stats()}")
        k += 1
        filename = f"{foldername}pp{k}.sobj"

load_monomials(160)