Sto usando pandas
su un server web (apache + modwsgi + django) e ho un bug difficile da riprodurre che ora ho scoperto è causato dal fatto che i panda non sono thread-safe.panda e sicurezza del thread numpy
Dopo un sacco di riduzione del codice ho finalmente trovato un breve programma standalone che può essere utilizzato per riprodurre il problema. Puoi vederlo sotto.
Il punto è: contrariamente alla risposta di this question questo esempio mostra che i panda possono bloccarsi anche con operazioni molto semplici che non modificano un dataframe. Non riesco a immaginare come questo semplice frammento di codice possa non essere sicuro con i thread ...
La domanda riguarda l'utilizzo di panda e numpy in un server web. È possibile? Come posso risolvere il mio codice usando i panda? (Un esempio di utilizzo di blocco sarebbe utile)
Ecco il codice che causa un errore di segmentazione:
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()
mio ambiente: python 2.7.3, 1.8.0 NumPy, panda 0.13.1
Non va in crash per me. Python 2.7.6, numpy 1.8.2, panda 0.14.1. Ho provato il ciclo principale fino a '10000'. – osa