To, co navrhujete, není přímo proveditelné. Vzhledem k tomu, že nové procesy lze točit nahoru a dolů mimo vaši kontrolu, neexistuje způsob, jak zachovat nativní data Pythonu v paměti.
Existuje však několik způsobů, jak to obejít.
Často stačí jedna úroveň úložiště párů klíč–hodnota. A někdy mít vyrovnávací paměti s pevnou velikostí pro hodnoty (které můžete použít přímo jako str
/bytes
/bytearray
předměty; cokoliv dalšího potřebujete struct
tam nebo jinak serializovat) je vše, co potřebujete. V takovém případě se o vše, co potřebujete, postará vestavěný systém mezipaměti uWSGI.
Pokud potřebujete přesnější kontrolu, můžete se podívat, jak je mezipaměť implementována nad SharedArea
a udělat něco na míru. To bych však nedoporučoval. V zásadě vám poskytuje stejný druh rozhraní API, jaké získáte se souborem, a jedinou skutečnou výhodou oproti pouhému použití souboru je, že server bude spravovat životnost souboru; funguje ve všech jazycích podporovaných uWSGI, dokonce i v těch, které nepovolují soubory; a usnadňuje to migraci vaší vlastní mezipaměti do distribuované (vícepočítačové) mezipaměti, pokud budete později potřebovat. Nemyslím si, že žádný z nich je pro vás relevantní.
Dalším způsobem, jak získat ploché úložiště klíč–hodnota, ale bez vyrovnávacích pamětí s pevnou velikostí, je stdlib Pythonu anydbm
. Vyhledávání párů klíč–hodnota je tak pythonic, jak jen může být:vypadá to jako dict
, kromě toho, že se zálohuje do databáze BDB (nebo podobné) na disku, která se podle potřeby ukládá do paměti, místo aby byla uložena v tabulce hash v paměti.
Pokud potřebujete zvládnout několik dalších jednoduchých typů – cokoli, co se neuvěřitelně rychle sundává/vybírá, například int
s – možná budete chtít zvážit shelve
.
Pokud je vaše struktura dostatečně rigidní, můžete pro nejvyšší úroveň použít databázi párů klíč–hodnota, ale k hodnotám přistupovat prostřednictvím ctypes.Structure
, nebo de/serializovat pomocí struct
. Ale obvykle, pokud to dokážete, můžete také odstranit nejvyšší úroveň, v tomto okamžiku je vaše celá věc jen jedna velká Structure
nebo Array
.
V tomto okamžiku můžete pro uložení použít pouze prostý soubor – buď mmap
it (pro ctypes
), nebo stačí open
a read
it (pro struct
).
Nebo použijte multiprocessing
Sdílené ctypes
Objekty pro přístup k vaší Structure
přímo mimo oblast sdílené paměti.
Mezitím, pokud ve skutečnosti nepotřebujete všechna data z mezipaměti neustále, jen útržky a kousky jednou za čas, přesně k tomu jsou databáze. Opět anydbm
, atd. může být vše, co potřebujete, ale pokud máte složitou strukturu, nakreslete ER diagram, přeměňte jej na sadu tabulek a použijte něco jako MySQL.