Usando locale.setlocale en Python incrustado sin romper el análisis de archivos en hilo C

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

Pregunta

Estamos utilizando un producto de middleware de terceros que nos permite escribir código en un intérprete de Python incorporado, y que expone una API a la que podemos llamar. Algunas de estas llamadas a la API nos permiten cargar varios tipos de archivos, y el código de carga se implementa en C. La carga de archivos ocurre en un hilo separado y vuelve a llamar a Python cuando los datos están disponibles. Hasta ahora, todo bien y elegante.

Hemos estado aplicando (heh) nuestro producto, y una cosa que nos gustaría hacer es formatear la salida numérica orientada al usuario de acuerdo con la configuración regional del usuario. Entonces, desde Python, hacemos esto:

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

Ahora, esto funciona (ya que los números orientados al usuario están formateados correctamente para su ubicación). Sin embargo, si la configuración regional del usuario difiere de la configuración regional C predeterminada, cualquier archivo que se cargue posteriormente devolverá datos incorrectos, presumiblemente porque toda la conversión de cadena a flotante se ha visto afectada, hasta el metal.

No podemos solucionar este problema implementando la carga de archivos con reconocimiento de la configuración regional, por lo que nuestra solución actual es establecer la configuración regional solo al formatear la salida para el usuario y luego volver a configurarla. Es decir, algo así como:

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

Esto parece un poco torpe, y me preguntaba si este es un enfoque común para formatear la salida local para el usuario. Mi otra preocupación es que esto obviamente no es seguro para subprocesos, por lo que presumiblemente todavía tendremos problemas si se produce un análisis de archivos en un subproceso separado cuando se cambia la configuración regional.

Se agradece cualquier información sobre las mejores prácticas. No tengo mucha experiencia con este tipo de cosas.

¿Fue útil?

Solución

Establecer la configuración regional después de que varios subprocesos hayan comenzado a funcionar puede tener resultados inesperados. A menos que pudiera encontrar un enfoque más sutil, probablemente dividiría la carga de archivos y la interfaz de usuario en procesos separados, comunicándome a través de una tubería o un socket de archivo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top