یک تابع پایتون بنویس که با استفاده از weakref و یک WeakValueDictionary یک کش ساده برای نگهداری آرایههای بزرگ numpy پیادهسازی کند بهطوری که آرایهها تنها در کش نگهداری شوند مگر اینکه مرجع قویتری وجود داشته باشد؛ توابع add_to_cache(id, array) و get_from_cache(id) را پیادهسازی کن؟
1.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:11 0.0
برای این سوال از ماژول weakref و numpy استفاده کن: یک weakref.WeakValueDictionary بساز و در add_to_cache آرایهها را با شناسهی دادهشده به آن اضافه کن و در get_from_cache با همان شناسه جستجو کن. نکتهها: آرایههای numpy بهعنوان مقادیر مناسباند چون اشیاء قابل ارجاع هستند، ولی انواع ابتدایی (مثل int یا str) را نباید با weakref مدیریت کرد؛ برای جلوگیری از آزادسازی زودهنگام میتوان در بخشهایی که نیاز به نگهداری طولانیمدت هست مرجع قوی به آرایهها بسازیم. این روش در محاسبات علمی/HPC برای کاهش مصرف حافظه و جلوگیری از نشت حافظه هنگام کار با آرایههای بزرگ مفید است.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
این روش با استفاده از weakref.WeakValueDictionary یک کش ساده برای نگهداری آرایههای بزرگ numpy فراهم میکند که فقط با مرجعهای ضعیف نگهداری میشود. در add_to_cache(id, array) آرایههای numpy.ndarray را اضافه کنید و برای جلوگیری از اشتباه با انواع غیر ndarray قبل از افزودن با isinstance(array, numpy.ndarray) بررسی کنید. چون WeakValueDictionary آرایهها را بهطور ضعیفی نگه میدارد، اگر هیچ ارجاع قوی وجود نداشته باشد، کش آنها را آزاد میکند بنابراین برای نگهداری طولانیمدت باید مرجع قوی در جای دیگری نگه دارید. در محیطهای HPC، از سیاستهای eviction مناسب استفاده کنید تا از نشت حافظه یا کاهش کارایی جلوگیری شود.
گزارش