windows - Skrabeskiver i Python?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forstod, at i visse Windows XP-programmer, som Photoshop, er der noget, der hedder 'scratch disks'. Hvad jeg forstod, at dette betyder, og ryd mig, hvis jeg har det forkert, er det, at Photoshop styrer sin egen virtuelle hukommelse på harddisken, i stedet for at lade Windows klare det. Jeg forstod, at årsagen til dette er en begrænsning ved Windows XP på hvor meget total hukommelse en proces kan tage, uanset HD-plads. Jeg tror, ​​at det er omkring 3 GB. Fik jeg det rigtigt hidtil?


Jeg laver en ansøgning i Python til at køre simuleringer. Det vil tage meget hukommelse, og vil køre på Windows XP. Er det muligt for den at bruge ridse diske? Hvordan?

Bedste reference


Indtil du rent faktisk går tom for hukommelsen, er det tidsspild, der tænker på dette.


Når du endelig løber tør for hukommelsen, skal du bruge en midlertidig fil til at gemme objekter, som din proces har brug for, men kan ikke passe ind i hukommelsen.


Brug pickle eller hylde (se Data Persistence) dine objekter i en fil. Hvis den fil sker på en disk med navnet 'ridse', så er det godt. [1]


Nogle gange vil du have dine midlertidige filer til at være på en separat disk fra dine andre arbejdsfiler af ydeevne. I nogle miljøer (SAN, NAS, lagringsarrayer) er dine diske virtuelle, og efter at have kigget efter en 'ridse' disk har det ingen præstationsfordele. I andre miljøer (dvs. du ejer al hardware) kan du sætte midlertidige filer på nogle andet drev, hvilket gør det køre en 'ridse' disk.

Andre referencer 1



  Jeg forstod, at årsagen til dette er en vis begrænsning ved Windows XP om, hvor meget total hukommelse en proces kan tage, uanset HD-plads. Jeg tror, ​​at det er omkring 3 GB.



Bare et FYI, dette er mere en begrænsning af et 32-bit-operativsystem i stedet for at være et Windows XP-problem. Du har det samme problem i 32-bit Vista, Linux, bsd ... du får ideen. Hvis du går 64-bit ruten, har du ikke disse problemer.


For eksempel giver Windows XP x64 op til 8 terabyte hukommelse pr. Proces. [2]

Andre referencer 2


Scratch disks vil gavne din ansøgning i tilfælde af at det virker med meget store filer,


Er det tilfældet?


Hvis ikke, så tror jeg ikke, du kan finde noget, der vil gavne din ansøgning på scratch disks.

Andre referencer 3


Hukommelseskortede filer kan være det, du leder efter. Pythons implementering giver dig mulighed for at bruge en fil som en genstande i hukommelsen. [3]

Andre referencer 4


Win32 API giver følgende: linktekst.
Du kan muligvis bruge disse funktioner gennem PyWin32. [4]

Andre referencer 5


Du kan kombinere S.Lotts svar om at bruge pickle (du bør bruge cPickle selv for bedre ydeevne) med SqlLite.


sqlite er indbygget i python 2.5 og op, så alt hvad du skal gøre er at importere :), og derefter gemme de sylte objekter som strenge derinde, og du har en god hurtig metode til at få adgang til dataene (i forhold til at bygge din egen metode), der hjælper med at holde dig organiseret også.


Bemærk: cPickle er næsten identisk med pickle i brug. Kun forskel er, at den er skrevet i C


Nyttige Python Docs:



  • sqlite3-modul

  • pickle-modul



Rediger : Det kan være en god ide at have en brugerstyret hukommelsesforbrugsgrænse. Det ville være en skam at gemme en masse data på disken og vente på slow-ass disk I/O, når brugeren har 8 GB RAM;) [5] [6]

Andre referencer 6


Du leder sikkert efter noget som ZODB. Men selvom ZODB forsøger at være gennemsigtig, vil ingen løsning være 100\% fri for artefakter. Du skal skrive din kode med en bevidsthed om, at dine objekter primært lever i en database, men at der er flere repræsentationer af dine objekter, der er caching/synkronisering af problemer mv. Intet vil gøre dette meget vanskelige problem helt trivielt for dig .