Rob给出的示例很好,但不是线程安全的。这是与线程一起使用的版本:
import localeimport threadingfrom datetime import datetimefrom contextlib import contextmanagerLOCALE_LOCK = threading.Lock()@contextmanagerdef setlocale(name): with LOCALE_LOCK: saved = locale.setlocale(locale.LC_ALL) try: yield locale.setlocale(locale.LC_ALL, name) finally: locale.setlocale(locale.LC_ALL, saved)# Let's set a non-US localelocale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')# Example to write a formatted English datewith setlocale('C'): print(datetime.now().strftime('%a, %b')) # e.g. => "Thu, Jun"# Example to read a formatted English datewith setlocale('C'): mydate = datetime.strptime('Thu, Jun', '%a, %b')它使用全局锁创建线程安全上下文管理器,并允许您使用LOCALE_LOCK使多个线程运行与语言环境相关的代码。它还处理yield语句中的异常,以确保始终还原原始语言环境。



