如果我阅读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()
问题是:
此代码线程是否安全?
django线程之间共享什么类型的变量?
答案 0 :(得分:1)
关于django模板及其线程问题,除了不使用它们之外,或者至少不使用对线程问题敏感的标记,你可以做很多事情。没有很多django模板标签确实存在问题,只有有状态模板标签有问题,例如cycle
。
在你给出的例子中,你没有做任何关于线程安全的事情,你也不应该这样做:logging
模块已经完全是线程安全的,只要你以正常的方式使用它,即在需要它的模块中调用logging.getLogger
,LOGGING
中的LOGGING_CONFIG
或settings.py
为set appropriately。不需要聪明一点。
您可能关注的其他事项是面对并发更新时的数据库完整性。不要,如果您正在使用PostgreSQL或MySQL / INNOdb数据库,那么您将完全受到并发shennanegans的保护。