xticks barplot python kill

python - barplot - pandas plot



¿Qué significa ''asesinado''? (3)

Tengo un script Python que importa un gran archivo CSV y luego cuenta el número de ocurrencias de cada palabra en el archivo, luego exporta los conteos a otro archivo CSV.

Pero lo que está sucediendo es que una vez que la parte de conteo finaliza y comienza la exportación, dice Killed en el término.

No creo que esto sea un problema de memoria (si lo fuera, supongo que obtendría un error de memoria y no lo Killed ).

¿Podría ser que el proceso esté tardando demasiado? Si es así, ¿hay alguna manera de extender el período de tiempo de espera para poder evitarlo?

Aquí está el código:

csv.field_size_limit(sys.maxsize) counter={} with open("/home/alex/Documents/version2/cooccur_list.csv",''rb'') as file_name: reader=csv.reader(file_name) for row in reader: if len(row)>1: pair=row[0]+'' ''+row[1] if pair in counter: counter[pair]+=1 else: counter[pair]=1 print ''finished counting'' writer = csv.writer(open(''/home/alex/Documents/version2/dict.csv'', ''wb'')) for key, value in counter.items(): writer.writerow([key, value])

Y el Killed sucede después de que se haya impreso el finished counting , y el mensaje completo es:

killed (program exited with code: 137)


Dudo que algo esté matando el proceso solo porque lleva mucho tiempo. Asesinado genéricamente significa que algo del exterior terminó el proceso, pero probablemente no en este caso presionar Ctrl-C ya que eso haría que Python salga de una excepción KeyboardInterrupt. Además, en Python obtendría la excepción MemoryError si ese fuera el problema. Lo que podría estar sucediendo es que estás atacando un error en Python o en un código de biblioteca estándar que causa un bloqueo del proceso.


El código de salida 137 (128 + 9) indica que su programa salió debido a la recepción de la señal 9, que es SIGKILL . Esto también explica el mensaje de killed . La pregunta es, ¿por qué recibiste esa señal?

La razón más probable es que su proceso haya superado cierto límite en la cantidad de recursos del sistema que puede usar. Dependiendo de su sistema operativo y la configuración, esto podría significar que tenía demasiados archivos abiertos, demasiado espacio de archivos en el archivo u otra cosa. Lo más probable es que su programa esté usando demasiada memoria. En lugar de arriesgarse a que las cosas se rompieran cuando las asignaciones de memoria comenzaron a fallar, el sistema envió una señal de muerte al proceso que estaba usando demasiada memoria.

Como comenté anteriormente, una razón por la que puede alcanzar un límite de memoria después de imprimir el finished counting es que su llamada a counter.items() en su bucle final asigna una lista que contiene todas las claves y valores de su diccionario. Si tu diccionario tiene muchos datos, esta podría ser una lista muy grande. Una posible solución sería usar counter.iteritems() que es un generador. En lugar de devolver todos los elementos en una lista, le permite iterar sobre ellos con mucho menos uso de memoria.

Entonces, sugiero probar esto, como tu ciclo final:

for key, value in counter.iteritems(): writer.writerow([key, value])

Tenga en cuenta que en Python 3, items devuelve un objeto de "vista de diccionario" que no tiene la misma sobrecarga que la versión de Python 2. Reemplaza los iteritems , por lo que si luego actualiza las versiones de Python, terminará cambiando el loop a la forma en que estaba.


Hay dos áreas de almacenamiento involucradas: la pila y el montón. La pila es donde se guarda el estado actual de una llamada al método (es decir, variables locales y referencias), y el montón es donde se almacenan los objetos. recursividad y memoria

Supongo que hay demasiadas claves en el counter dict que consumirán demasiada memoria de la región de montón, por lo que el tiempo de ejecución de Python generará una excepción OutOfMemory .

Para guardarlo, no cree un objeto gigante, por ejemplo, el contador .

1.

un programa que crea demasiadas variables locales.

Python 2.7.9 (default, Mar 1 2015, 12:57:24) [GCC 4.9.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> f = open(''stack_overflow.py'',''w'') >>> f.write(''def foo():/n'') >>> for x in xrange(10000000): ... f.write(''/tx%d = %d/n'' % (x, x)) ... >>> f.write(''foo()'') >>> f.close() >>> execfile(''stack_overflow.py'') Killed

2.OutOfMemory

un programa que crea un dict gigante incluye demasiadas teclas.

>>> f = open(''out_of_memory.py'',''w'') >>> f.write(''def foo():/n'') >>> f.write(''/tcounter = {}/n'') >>> for x in xrange(10000000): ... f.write(''counter[%d] = %d/n'' % (x, x)) ... >>> f.write(''foo()/n'') >>> f.close() >>> execfile(''out_of_memory.py'') Killed Referencias