یک کش ساده برای آرایههای بزرگ محاسباتی با استفاده از weakref.WeakValueDictionary پیادهسازی کن که آرایهها را با نام کلیدی ذخیره کند و نشان دهد زمانی که تنها ارجاع قوی به یک آرایه حذف شود، آن آیتم بهطور خودکار از کش پاک میشود (یک مثال عملی با numpy ارائه بده).
1.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:38 0.0
برای حل این مسئله از ماژول weakref و بهخصوص WeakValueDictionary استفاده کن: آرایهها را با کلیدهای رشتهای در ساختار ذخیره کن و در مثال یک ارجاع قوی جدا به آرایه نگه دار تا بماند، سپس آن ارجاع را حذف کن و با استفاده از gc.collect() بررسی کن که ورودی مربوطه از کش حذف شده است. نکات: از import weakref و import numpy as np استفاده کن، برای مشاهدهٔ وضعیت کش از متدهای موجودیت کلید یا items() استفاده کن و بهخاطر داشته باش که weakref برای جلوگیری از پرشدن حافظه در محاسبات عددی سنگین مفید است؛ در صورت نیاز میتوانی callbackهای weakref.ref را برای پاکسازی اضافی تعریف کنی.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
استفاده از weakref.WeakValueDictionary برای کش آرایههای بزرگ با کلیدهای رشتهای مفید است، زیرا مقادیر به صورت weak نگه داشته میشوند و با از بین رفتن ارجاعهای قوی پاک میشوند. برای نشان دادن این رفتار، یک مرجع قوی به آرایه نگه دارید تا هنوز در دسترس باشد، سپس آن مرجع را حذف کنید و با gc.collect() بررسی کنید که آیتم از کش حذف شده است. برای مشاهدهٔ وضعیت کش میتوانید از d.keys() یا d.items() استفاده کنید تا حضور یا حذف شدن آرایهها را ببینید. در صورت نیاز میتوانید با استفاده از weakref.ref با callback، تمیزکاری اضافی را انجام بدهید.
گزارش