在原子上下文上运行时,我的一个方法不起作用。我想问Django它是否正在进行交易。
该方法可以创建线程或进程并将结果保存到数据库。这有点奇怪,但是当可以使用某个过程时,可以获得巨大的性能优势。
我发现特别是Django的过程有点粗略。我知道如果方法选择将结果保存在进程中并且该方法在原子上下文上运行,Django将引发异常。
如果我可以检查原子上下文,那么我可以立即抛出异常(而不是出现奇怪的错误)或强制该方法只创建一个线程。
我找到了is_managed()
方法,但根据this question,它已在Django 1.8中删除。
答案 0 :(得分:1)
根据this ticket,有几种方法可以检测到这种情况:not transaction.get_autocommit()
(使用公共API)或transaction.get_connection().in_atomic_block
(使用私有API)。