检查原子上下文

Check for atomic context

当 运行 在原子上下文中时,我的一个方法不起作用。我想问 Django 是否正在 运行 交易。

该方法可以创建线程或进程并将结果保存到数据库。这有点奇怪,但是当可以使用进程时会有巨大的性能优势。

我发现 Django 的流程有些粗略。我知道如果方法选择将结果保存在进程中并且方法在原子上下文中 运行,Django 将引发异常。

如果我可以检查原子上下文,那么我可以立即抛出异常(而不是得到奇怪的错误)或强制该方法只创建一个线程。

我找到了 is_managed() 方法,但根据 this question 它已在 Django 1.8 中删除。

根据 this ticket 有几种方法可以检测到这一点:not transaction.get_autocommit()(使用 public API)或 transaction.get_connection().in_atomic_block(使用私有API).