/ / Czy tłumaczenia są bezpieczne dla użytkownika w Django? - django, internacjonalizacja, gevent, gunicorn

Czy tłumaczenia są przyjazne dla środowiska w Django? - django, internacjonalizacja, gevent, gunicorn

Po przyjrzeniu się kodowi źródłowemu Django, widzę, że Django przechowuje aktywny język w bieżącym wątku.

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

Wszystko w porządku, ale nie jestem pewien, czy jest bezpieczny dla zielonych? Używam Django z gunicorn, skonfigurowany do uruchamiania „zielonych” pracowników gevent local() załatany przez Geventa? Czy może istnieje warunek rasowy, w którym żądanie może zostać zrealizowane przy użyciu aktywnego języka innego żądania, gdy używany jest program gevent?

Dzięki.

Odpowiedzi:

1 dla odpowiedzi № 1

Ok, nieważne, znalazłem odpowiedź w dokumentacja geventa: Magazyn lokalny dla wątków jest łatany przez Gevent i staje się magazynem lokalnym Greenlet. Więc wszystko powinno być bezpieczne.

Oto szczegóły:

  • gevent "s patch_thread() funkcja łata thread i threading moduły, w tym łatka, aby pamięć lokalna wątku stała się pamięcią lokalną greenlet.
  • gevent "s patch_all() wywołania funkcji patch_thread().
  • gunicorn nazywa gevent patch_all() funkcja przy uruchamianiu odpowiedniego pracownika.