Ich benutze pandas
auf einem Webserver (apache + modwsgi + django) und habe einen schwer zu reproduzierenden Fehler, den ich entdeckt habe, weil Pandas nicht threadsicher sind.
Nach einer Menge 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: Im Gegensatz zu der Antwort von diese Frage zeigt dieses Beispiel das Pandas können sogar mit sehr einfachen Operationen abstürzen, die keinen Datenrahmen verändern. Ich kann mir nicht vorstellen, wie dieses einfache Code-Snippet möglicherweise mit Threads unsicher sein könnte ...
Die Frage bezieht sich auf die Verwendung von Pandas und Numpy auf 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:
%Vor%Meine Umgebung: python 2.7.3, nupy 1.8.0, pandas 0.13.1
Siehe Vorbehalt in den Dokumenten hier: Ссылка
pandas ist nicht Thread-sicher, weil der zugrundeliegende Kopiermechanismus nicht ist. Numpy ich glaube, hat eine atomare Kopieroperation, aber Pandas hat eine Schicht darüber.
Kopieren ist die Grundlage von Pandas-Operationen (da die meisten Operationen ein neues Objekt generieren, das an den Benutzer zurückgegeben wird)
Es ist nicht trivial, dies zu beheben und würde mit einer ziemlich hohen Perf-Kosten kommen, so würde ein wenig Arbeit brauchen, um damit richtig umzugehen.
Am einfachsten ist es, Objekte nicht über Threads hinweg zu teilen oder sie für die Verwendung zu sperren.
Konfigurieren Sie mod_wsgi, um in einem einzelnen Thread-Modus zu laufen.
%Vor%In diesem Fall verwendet es den mod_wsgi-Daemon-Modus, so dass Prozesse / Threads unabhängig von dem von Ihnen verwendeten Apache MPM gesetzt werden können.
Tags und Links python multithreading numpy pandas