在查看了 Django 的源代码后,我看到 Django 将活动语言存储在当前线程中。
在django.utils.translation.trans_real
:
_active = local()
...
def activate(language):
"""
Fetches the translation object for a given tuple of application name and
language and installs it as the current translation object for the current
thread.
"""
_active.value = translation(language)
这一切都很好,但我不确定它是否是绿色安全的?我正在使用 gunicorn 运行 Django,配置为运行“绿色”gevent 工作人员。local()
猴子补丁是gevent吗?或者是否存在竞争条件,在使用 gevent 时可能会使用另一个请求的活动语言来服务请求?
谢谢。