Cスレッドでのファイル解析を中断せずに、組み込みPythonでlocale.setlocaleを使用する

StackOverflow https://stackoverflow.com/questions/140295

質問

埋め込みのPythonインタープリターでコードを記述できるサードパーティのミドルウェア製品を使用しており、呼び出し可能なAPIを公開しています。これらのAPI呼び出しのいくつかにより、さまざまな種類のファイルを読み込むことができます。読み込みコードはCで実装されます。ファイルの読み込みは別のスレッドで行われ、データが利用可能になるとPythonを呼び出します。これまでのところ、すべて順調です。

私たちは製品をi14ing(heh)してきました。私たちがやりたいことの1つは、ユーザーのロケール設定に従ってユーザー向けの数値出力をフォーマットすることです。したがって、Pythonから次のようにします。

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

現在、これは機能します(ユーザー向けの数字がロケールに合わせて正しくフォーマットされているため)。ただし、ユーザーのロケールがデフォルトのCロケールと異なる場合、おそらくすべての文字列から浮動小数点への変換が金属に影響を与えたため、その後ロードされるファイルは誤ったデータを返します。

ロケールに対応したファイルの読み込みを実装することでこの問題を回避することはできません。したがって、現在の回避策は、ユーザーの出力をフォーマットするときにロケールのみを設定し、その後再度設定することです。つまり、次のようなものです。

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

これは少し不格好に思えますが、これがユーザーのロケールを意識した出力をフォーマットするための一般的なアプローチかどうか疑問に思っていましたか?私のもう1つの懸念は、これが明らかにスレッドセーフではないことです。したがって、ロケールが変更されたときに別のスレッドでファイル解析が行われると、おそらく問題が発生します。

ベストプラクティスに関する情報はありがたいです。この種のことはあまり経験がありません。

役に立ちましたか?

解決

複数のスレッドが動作を開始した後にロケールを設定すると、予期しない結果が生じる可能性があります。もっと微妙なアプローチを考え出せない限り、おそらくファイルの読み込みとユーザーインターフェイスを別々のプロセスに分割し、パイプまたはファイルソケットを介して通信します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top