Frage

Wir verwenden ein Drittanbieter-Middleware-Produkt, das uns Code in einem eingebetteten Python-Interpreter zu schreiben erlaubt, und die stellen eine API, die wir nennen können in. Einige dieser API-Aufrufe ermöglichen es uns, verschiedene Arten von Datei und der Ladecode implementiert in C zum Laden einer Datei geschieht in einem separaten Thread und rufen zurück in Python zu laden, wenn die Daten verfügbar sind. Bisher alles gut und gut.

Wir haben i14ing (heh) unser Produkt, und eine Sache, die wir tun möchten, ist Format Benutzer gerichtete numerische Ausgabe entsprechend den lokalen Einstellungen des Benutzers. Also, aus Python, wir dies tun:

import locale
locale.setLocale( locale.LC_ALL, '' )

Nun, das funktioniert (in, dass die Benutzer gerichteten Zahlen richtig für ihre locale formatiert). Wenn jedoch die Sprache des Nutzers von der Standard-C locale unterscheidet, werden alle Dateien, die später geladen werden, werden falsche Daten zurück, vermutlich weil alle String-to-Float-Umwandlung betroffen ist, bis auf das Metall.

Wir können nicht dieses Problem umgehen, indem locale bewusst Datei Laden Implementierung, so dass unsere aktuelle Problemumgehung ist nur das Gebietsschema festgelegt, wenn die Formatierung der Ausgabe für den Benutzer, und sie dann anschließend wieder zurückwerfen. Das heißt, so etwas wie:

import locale
currentLocale = locale.getLocale( locale.LC_ALL )
locale.setLocale( locale.LC_ALL, '' )
displayNumbersToTheUser()
locale.setlocale( locale.LC_ALL, currentLocale )

Dies scheint ein bisschen klobig, und ich frage mich, ob dies ein gemeinsames Konzept ist locale-aware Ausgabe für den Benutzer der Formatierung? Meine andere Sorge ist, dass dieser Thread offensichtlich nicht sicher ist, so dass wir vermutlich noch Probleme bekommen, wenn eine Datei Parsing in einem separaten Thread tritt auf, wenn das Gebietsschema geändert wird.

Alle Informationen über bewährte Praxis sehr geschätzt wird -. Ich habe nicht viel Erfahrung mit dieser Art der Sache

War es hilfreich?

Lösung

Zur Einstellung der locale nach mehreren Threads Betriebs haben damit begonnen, zu unerwarteten Ergebnissen führen kann. Es sei denn, ich einen subtilere Ansatz herausfinden konnte, würde ich wahrscheinlich nur das Laden von Dateien aufgeteilt und die Benutzeroberfläche in separate Prozesse, die Kommunikation durch ein Rohr oder eine Datei stecken.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top