Django и безопасность потоков - PullRequest
3 голосов
/ 22 ноября 2010

Если я читаю документацию по django, только в документах о тегах шаблона упоминается потенциальная опасность безопасности потоков.

Однако мне любопытно, что я должен делать / избегать, чтобы писать поток-защищенный код в Django ...

Один из примеров: у меня есть следующая функция для настройки регистраторов, используемых в django.

_LOGGER_CONFIGURED = False

def config_logger():
    global _LOGGER_CONFIGURED
    if _LOGGER_CONFIGURED: return
    _LOGGER_CONFIGURED = True

    rootlogger = logging.getLogger('')
    stderr_handler = StreamHandler(sys.stderr)
    rootlogger.addHandler(stderr_handler)

и в конце моего корневого urlconf, яиметь следующий вызов функции:

config_logger()

Вопрос:

  1. Является ли этот код безопасным для потока?

  2. Какойпеременных разделены между потоками django?

1 Ответ

1 голос
/ 23 ноября 2010

На самом деле не так много можно сделать с шаблонами django и их проблемами с потоками, кроме того, что они не используются или, по крайней мере, не используют теги, чувствительные к проблемам потоков. Существует не так много тегов шаблонов django, в которых есть проблемы, есть только с сохранением состояния, например cycle.

В приведенном вами примере вы ничего не делаете с безопасностью потоков, и вы не должны этого делать: модуль logging уже полностью безопасен для потоков, если вы используете его обычным образом, что это вызывать logging.getLogger в модулях, которые в этом нуждаются, и LOGGING или LOGGING_CONFIG - это , установленный соответствующим образом в вашем settings.py. Не нужно быть умным с этим.

другие вещи, которые могут вас беспокоить, - это целостность базы данных при одновременных обновлениях. Не думайте, что если вы используете базы данных PostgreSQL или MySQL / INNOdb, то вы полностью защищены от параллелизма shennanegans.

...