pandas y seguridad de hilos numpy
Estoy usandopandas
en un servidor web (apache + modwsgi + django) y tengo un error difícil de reproducir que ahora descubrí que es causado por pandas que no son seguros para subprocesos.
Después de una gran reducción de código, finalmente encontré un breve programa independiente que se puede utilizar para reproducir el problema. Puedes verlo a continuación.
El punto es: contrario a la respuesta deesta pregunta Este ejemplo muestra que los pandas pueden bloquearse incluso con operaciones muy simples que no modifican un marco de datos. No puedo imaginar cómo este simple fragmento de código podría ser inseguro con hilos ...
La pregunta es sobre el uso de pandas y numpy en un servidor web. ¿Es posible? ¿Cómo se supone que debo arreglar mi código usando pandas? (sería útil un ejemplo de uso de bloqueo)
Aquí está el código que causa una falla de segmentación:
import threading
import pandas as pd
import numpy as np
def let_crash(crash=True):
t = 0.02 * np.arange(100000) # ok con 10000
data = pd.DataFrame({'t': t})
if crash:
data['t'] * 1.5 # CRASH
else:
data['t'].values * 1.5 # THIS IS OK!
if __name__ == '__main__':
threads = []
for i in range(100):
if True: # asynchronous
t = threading.Thread(target=let_crash, args = ())
t.daemon = True
t.start()
threads.append(t)
else: # synchronous
let_crash()
for t in threads:
t.join()
Mi entorno: python 2.7.3, numpy 1.8.0, pandas 0.13.1