[Python] How to return a generator using joblib.Parallel()?

Discussão em 'Python' iniciado por Stack, Agosto 29, 2025.

  1. Stack

    Stack Membro Participativo

    I have a piece of code below where the joblib.Parallel() returns a list.

    import numpy as np
    from joblib import Parallel, delayed

    lst = [[0.0, 1, 2], [3, 4, 5], [6, 7, 8]]
    arr = np.array(lst)
    w, v = np.linalg.eigh(arr)

    def proj_func(i):
    return np.dot(v[:,i].reshape(-1, 1), v[:,i].reshape(1, -1))

    proj = Parallel(n_jobs=-1)(delayed(proj_func)(i) for i in range(len(w)))


    Instead of a list, how do I return a generator using joblib.Parallel()?

    Edit:

    I have updated the code as suggested by @user3666197 in comments below.

    import numpy as np
    from joblib import Parallel, delayed

    lst = [[0.0, 1, 2], [3, 4, 5], [6, 7, 8]]
    arr = np.array(lst)
    w, v = np.linalg.eigh(arr)

    def proj_func(i):
    yield np.dot(v[:,i].reshape(-1, 1), v[:,i].reshape(1, -1))

    proj = Parallel(n_jobs=-1)(delayed(proj_func)(i) for i in range(len(w)))


    But I am getting this error:

    TypeError: can't pickle generator objects


    Am I missing something? How do I fix this? My main gain here is to reduce memory as proj can get very large, so I would just like to call each generator in the list one at a time.

    Continue reading...

Compartilhe esta Página