/ / As traduções greenlet-safe no Django? - django, internacionalização, gevent, gunicorn

As traduções são seguras em greenlet no Django? - django, internacionalização, gevent, gunicorn

Depois de dar uma olhada no código fonte do Django, vejo que o Django armazena o idioma ativo no thread atual.

Dentro 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)

Está tudo bem, mas não tenho certeza se é ou não seguro para o greenlet? Estou executando o Django com gunicorn, configurado para executar trabalhadores de eventos "verdes". local() remendado por gevent? Ou existe uma condição de corrida em que uma solicitação pode ser atendida usando o idioma ativo de outra solicitação ao usar o gevent?

Obrigado.

Respostas:

1 para resposta № 1

Ok deixa pra lá, eu encontrei a resposta em documentação de gevent: O armazenamento local de encadeamento é corrigido por gevent e se torna o armazenamento local verde. Então, tudo deve estar seguro.

Aqui estão os detalhes:

  • gevent "s patch_thread() função corrige o thread e threading módulos, incluindo o patch para fazer com que o armazenamento local de threads se torne um armazenamento local verde.
  • gevent "s patch_all() chamadas de função patch_thread().
  • gunicorn chama gevent "s patch_all() função ao iniciar um trabalhador de eventos.