Django和线程安全

时间:2010-11-22 20:37:49

标签: python django thread-safety

如果我阅读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)

在我的root urlconf的末尾,我有以下函数调用:

config_logger()

问题是:

  1. 此代码线程是否安全?

  2. django线程之间共享什么类型的变量?

1 个答案:

答案 0 :(得分:1)

关于django模板及其线程问题,除了不使用它们之外,或者至少不使用对线程问题敏感的标记,你可以做很多事情。没有很多django模板标签确实存在问题,只有有状态模板标签有问题,例如cycle

在你给出的例子中,你没有做任何关于线程安全的事情,你也不应该这样做:logging模块已经完全是线程安全的,只要你以正常的方式使用它,即在需要它的模块中调用logging.getLoggerLOGGING中的LOGGING_CONFIGsettings.pyset appropriately。不需要聪明一点。

您可能关注的其他事项是面对并发更新时的数据库完整性。不要,如果您正在使用PostgreSQL或MySQL / INNOdb数据库,那么您将完全受到并发shennanegans的保护。