`__init__` and `__call__` methods are not cloudpickled
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 30/100
Hướng nghiên cứu
Bắt đầu bằng cách chạy reproducer của issue cho wrapt và pandas, sau đó kiểm tra cách cloudpickle xử lý các hàm được decorator và các lớp wrapper trong quá trình dumps và loads. Công việc hoàn tất khi callable đã được deserialize vẫn giữ nguyên hành vi của call và init của wrapper, bao gồm cả kết quả số lượng hàng được hiển thị trong ví dụ.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
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?
- Ngôn ngữ chính
- Python
- Star
- 1.9k
- Fork
- 197
- Merge trung bình
- 1 ngày 10 giờ
- Pull request đã merge (30 ngày)
- 1
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của cloudpipe/cloudpickle
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
cloudpipe/cloudpickle#593 · 1 bình luận ·
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 42/100
cloudpipe/cloudpickle#595 ·
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 65/100
cloudpipe/cloudpickle#592 · 2 bình luận ·
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 35/100
cloudpipe/cloudpickle#589 ·
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 20/100
cloudpipe/cloudpickle#587 ·
Tất cả issue của cloudpipe/cloudpickle
Issue tương tự
-
bug priority:low
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
CyberAgent/psd2svg#436 ·
-
area/install-update comp/cli comp/desktop P3 sweeper:risk-compatibility type/bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 86/100
NousResearch/hermes-agent#122386 · 1 bình luận ·
-
ai-generated
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
vllm-project/production-stack#1105 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100