Pandas und Numpy Thread Sicherheit
Ich benutzepandas
Auf einem Webserver (Apache + Modwsgi + Django) und habe einen schwer zu reproduzierenden Fehler, den ich jetzt entdeckt habe, weil Pandas nicht threadsicher sind.
Nach viel Code-Reduktion habe ich endlich ein kurzes Standalone-Programm gefunden, mit dem das Problem reproduziert werden kann. Sie können es unten sehen.
Der Punkt ist: entgegen der Antwort vondiese Frag Dieses Beispiel zeigt, dass Pandas auch bei sehr einfachen Operationen abstürzen können, bei denen ein Datenrahmen nicht geändert wird. Ich kann mir nicht vorstellen, wie dieses einfache Code-Snippet mit Threads möglicherweise unsicher sein könnte ...
Die Frage bezieht sich auf die Verwendung von Pandas und Numpy in einem Webserver. Ist es möglich? Wie soll ich meinen Code mit Pandas reparieren? (Ein Beispiel für die Verwendung von Sperren wäre hilfreich.)
Hier ist der Code, der einen Segmentierungsfehler verursacht:
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()
Meine Umgebung: Python 2.7.3, NumPy 1.8.0, Pandas 0.13.1