find_next_sibling - python soup find
¿Cómo comer memoria usando Python? (4)
Solo para experimentación y Diversión ... Estoy tratando de crear una aplicación que pueda "A propósito" consumir RAM tanto como lo especifiquemos de inmediato. Por ejemplo, quiero consumir 512 MB de RAM, entonces la aplicación consumirá 512 MB directamente.
He buscado en la web, la mayoría de ellos están utilizando el bucle while para llenar el ram con variables o datos. Pero creo que es una forma lenta de llenar la memoria RAM y puede que tampoco sea precisa.
Estoy buscando una biblioteca en python sobre gestión de memoria. y encontré estos http://docs.python.org/library/mmap.html . Pero no puedo averiguar cómo usar estas bibliotecas para comer el espacio RAM en una sola toma.
Alguna vez vi una aplicación para devorar miembros, pero no sé cómo fueron escritas ...
Entonces, ¿hay alguna otra sugerencia mejor para llenar la RAM con datos aleatorios de inmediato? ¿O debería simplemente usar while loop para llenar los datos manualmente pero con Multi-Threading para hacerlo más rápido?
Aquí hay una versión de la respuesta de markolopa que funcionó para mí:
import os
import psutil
PROCESS = psutil.Process(os.getpid())
MEGA = 10 ** 6
MEGA_STR = '' '' * MEGA
def pmem():
try:
tot, avail, percent, used, free, active, inactive, buffers = psutil.virtual_memory()
except ValueError:
tot, avail, percent, used, free, active, inactive, buffers, cached, shared = psutil.virtual_memory()
tot, avail, used, free = tot / MEGA, avail / MEGA, used / MEGA, free / MEGA
proc = PROCESS.memory_info()[1] / MEGA
print(''process = %s total = %s avail = %s used = %s free = %s percent = %s''
% (proc, tot, avail, used, free, percent))
def alloc_max_array():
i = 0
ar = []
while True:
try:
#ar.append(MEGA_STR) # no copy if reusing the same string!
ar.append(MEGA_STR + str(i))
except MemoryError:
break
i += 1
max_i = i - 1
print(''maximum array allocation:'', max_i)
pmem()
def alloc_max_str():
i = 0
while True:
try:
a = '' '' * (i * 10 * MEGA)
del a
except MemoryError:
break
i += 1
max_i = i - 1
_ = '' '' * (max_i * 10 * MEGA)
print(''maximum string allocation'', max_i)
pmem()
pmem()
alloc_max_str()
alloc_max_array()
No podrás asignar toda la memoria que puedas usando construcciones como
s = '' '' * BIG_NUMBER
Es mejor adjuntar una lista como en
a = []
while True:
print len(a)
a.append('' '' * 10**6)
Aquí hay un código más largo que brinda más información sobre los límites de asignación de memoria:
import os
import psutil
PROCESS = psutil.Process(os.getpid())
MEGA = 10 ** 6
MEGA_STR = '' '' * MEGA
def pmem():
tot, avail, percent, used, free = psutil.virtual_memory()
tot, avail, used, free = tot / MEGA, avail / MEGA, used / MEGA, free / MEGA
proc = PROCESS.get_memory_info()[1] / MEGA
print(''process = %s total = %s avail = %s used = %s free = %s percent = %s''
% (proc, tot, avail, used, free, percent))
def alloc_max_array():
i = 0
ar = []
while True:
try:
#ar.append(MEGA_STR) # no copy if reusing the same string!
ar.append(MEGA_STR + str(i))
except MemoryError:
break
i += 1
max_i = i - 1
print ''maximum array allocation:'', max_i
pmem()
def alloc_max_str():
i = 0
while True:
try:
a = '' '' * (i * 10 * MEGA)
del a
except MemoryError:
break
i += 1
max_i = i - 1
_ = '' '' * (max_i * 10 * MEGA)
print ''maximum string allocation'', max_i
pmem()
pmem()
alloc_max_str()
alloc_max_array()
Esta es la salida que obtengo:
process = 4 total = 3179 avail = 2051 used = 1127 free = 2051 percent = 35.5
maximum string allocation 102
process = 1025 total = 3179 avail = 1028 used = 2150 free = 1028 percent = 67.7
maximum array allocation: 2004
process = 2018 total = 3179 avail = 34 used = 3144 free = 34 percent = 98.9
Una forma simple podría ser:
some_str = '' '' * 512000000
Parecía funcionar bastante bien en mis pruebas.
Edición : en Python 3, es posible que desee utilizar bytearray(512000000)
lugar.
Puedes asignar una gran cantidad de ram ejecutando:
while True:
for i in range(0,100000000):
Gig = 1024*1024*1024*2#A Gig multiplied by 2
a = 787878788888888888888888888888 * (i * Gig)
a = a * i
print str(a)*2
Encontré este código congelando mi PC en 5 minutos
Guárdelo en un .pyw para la asignación de RAM de fondo
Si no congela tu PC, intenta aumentar el valor de a
Para detenerlo rápidamente, guarde este código en un archivo .py:
#First we send signals
os.system("TASKKILL /im pythonw.exe")
os.system("TASKKILL /im python.exe")
print "Forcefull termination"
#Now we forcefully terminate
#pythonw.exe if running in idle or background
os.system("TASKKILL /im python.exe /f")
os.system("TASKKILL /im pythonw.exe /f")
os.system("pause")