Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

152
Vistas
Pickle aún falla para los objetos numpy.void

Hace más de un año informé de un error que encontré al recopilar algunos datos bastante complejos. En ese momento no sabía cuál era el problema y creía que podría haber tenido algo que ver con las referencias recursivas.

Me encontré con el problema varias veces mientras trabajaba en mi proyecto, pero solo hice cosas arbitrarias para intentar solucionarlo hasta que desapareció el error. Ahora finalmente me tomé el tiempo para concentrarme en la fuente del problema y refinar mi MWE. Esto es lo que se me ocurrió:

 import pickle import numpy as np # create data dtypes = [('f0', 'O')] # for some reason, I need at least an extra of 19 fields for it to crash # immediately dtypes += [(f'f{i+1}', 'i4') for i in range(19)] data = np.empty(1, dtype=dtypes) # print(data[0]) # dump data dump = pickle.dumps(data[0], pickle.HIGHEST_PROTOCOL) # print('dumping works') # load data load = pickle.loads(dump) # print('loading works') # process crashes here if len(dtypes) > 19 print(load) # process prints random data, eg # (((...), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), 0, 0, # -1931060898, 32763, 1472326776, 503, 1482667496, 503, 0, 0, 1484270024, # 503, 1472326776, 503, -1930803631, 32763, 1484270024, 503) # or # ((((((...), False, True), False, True), dtype('int32'), None), 0, 0), 0, 0) # or # (((...), <cell at 0x0000017018A25888: str object at 0x000001701AF998F0>, # <cell at 0x0000017019084498: bool object at 0x00007FFB8D0EA970>, # <cell at 0x00000170190842B8: int object at 0x00007FFB8D16A270>, # <cell at 0x000001701927E2E8: str object at 0x0000017018989BB0>, # <cell at 0x0000017018A3E798: bool object at 0x00007FFB8D0EA970>), # 0, 0, -1931060898, 32763, 451341512) # and crashes immediately afterwards if 2 <= len(dtypes) <= 19. # process finishes with exit code 0 if data has no additional fields except f0, # and prints # (((...),),)

Ahora soy consciente de que se han informado problemas similares en el pasado:

decapado/decapado de numpy.void y numpy.record para multiprocesamiento

Error de segmentación con numpy.void y pickle

Python: el decapado falla para los objetos numpy.void

Y en un caso bastante reciente y muy similar

Segfault después de cargar objetos vacíos decapados

Parece que se ha introducido una solución , sin embargo, mi código aún provoca un bloqueo:

 Process finished with exit code -1073741819 (0xC0000005)

Ahora, para Python: el decapado falla para los objetos numpy.void , la respuesta aceptada es un comentario de jottos (29 de diciembre de 2009 a las 18:42):

por lo tanto, el decapado solo funcionará con funciones y clases de módulo de nivel superior, y no decapará datos de clase, por lo que si se requieren algunos códigos/datos de clase numpy para producir una representación del tipo de vacío numpy, el decapado no funcionará como se esperaba. Puede ser que el paquete numpy haya implementado una repr interna para imprimir el tipo vacío como una tupla, si este es el caso, lo que decapaste ciertamente no será lo que imprimiste.

Pero esto es de hace más de diez años, y parece que desde entonces se han introducido correcciones de errores. Entonces, ¿sigue siendo eso lo que está pasando aquí, o es algo más? Especialmente porque mi código muestra un comportamiento tan arbitrario.

Información de configuración

Windows : 10 Home, versión 21H1, compilación 19043.1288

PyCharm : 2021.2 (Profesional), compilación #PY-212.4746.96

Python (a través de anaconda): 3.7.7 [MSC v.1916 64 bits (AMD64)]

Numpy : 1.19.2

Encurtido : 4.0

over 4 years ago · Santiago Trujillo
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda