3

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

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

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

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

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

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

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

ベストプラクティスに関する情報は大歓迎です - 私はこの種のことについてあまり経験がありません.

4

1 に答える 1

1

複数のスレッドが動作し始めた後にロケールを設定すると、予期しない結果になる場合があります。もっと巧妙なアプローチを見つけられない限り、ファイルの読み込みとユーザー インターフェイスを別のプロセスに分割し、パイプまたはファイル ソケットを介して通信することになるでしょう。

于 2008-09-27T02:42:40.407 に答える