Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

`__init__` and `__call__` methods are not cloudpickled

Aperta
#464 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
30/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
pandas, python
Ambito
backend

Direzione di ricerca

Inizia eseguendo il reproducer dell'issue per wrapt e pandas, quindi esamina come cloudpickle gestisce le funzioni decorate e le classi wrapper durante i dumps e i loads. Il lavoro è completo quando il callable deserializzato mantiene il comportamento di call e init del wrapper, incluso l'output del conteggio delle righe mostrato nell'esempio.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Overwriting the logic inside __call__ method of the wrapper:

import cloudpickle
import wrapt
import pandas as pd

def _num_of_rows_wrapper() -> Any:
    class FunctionWrapper(wrapt.FunctionWrapper):
        def __call__(self, *args: Any, **kwargs: Any) -> Any:
            dataframe = super(FunctionWrapper, self).__call__(*args, **kwargs)
            num_of_rows = len(dataframe.index)
            print(f"Num of rows: {num_of_rows}")

            return dataframe

    return FunctionWrapper

def num_of_rows():
    @wrapt.decorator(proxy=_num_of_rows_wrapper())
    def wrapper(wrapped, instance, args, kwargs) -> None:
        return wrapped(*args, **kwargs)

    return wrapper    

@num_of_rows()
def prepare_data():
    data = [["id1", 10], ["id2", 15], ["id3", 14]]
    pandas_df = pd.DataFrame(data, columns=["id", "value"])
    return pandas_df

Running the decorated function works as expected (num of rows printed):

prepare_data()

Once it is cloudpickled and loaded, __call__ gets lost (num of rows is not printed)

dump = cloudpickle.dumps(prepare_data)
loaded = cloudpickle.loads(dump)
loaded()

Same happens for the __init__ . Any suggestion for keeping those functions with cloudpickle?

Lingua principale
Python
Stelle
1.9k
Fork
197
Merge medio
1g 10h
PR unite (30g)
1

Preparare l'ambiente

Non abbiamo ancora controllato i file di configurazione di questo progetto. Parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di cloudpipe/cloudpickle

Tutte le issue di cloudpipe/cloudpickle

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.