我们正在使用第三方中间件产品,它允许我们在嵌入式Python解释器中编写代码,并公开我们可以调用的API。其中一些API调用允许我们加载各种类型的文件,加载代码在C中实现。文件加载发生在一个单独的线程中,并在数据可用时调回Python。到目前为止,一切都很好,花花公子。

我们一直在使用我们的产品,我们想要做的一件事是根据用户的区域设置格式化面向用户的数字输出。所以,从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 )

这看起来有点笨拙,我想知道这是否是为用户格式化区域设置感知输出的常用方法?我的另一个担心是,这显然不是线程安全的,所以如果在更改语言环境时在单独的线程中发生任何文件解析,我们可能仍然会遇到问题。

有关最佳做法的任何信息都表示赞赏 - 我对此类事情没有多少经验。

有帮助吗?

解决方案

在多个线程开始运行后设置语言环境可能会产生意外结果。除非我能找到更微妙的方法,否则我可能只是将文件加载和用户界面分成不同的进程,通过管道或文件套接字进行通信。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top