我有一个django项目,其中数据库值需要经常自己更新.有一个cronjob运行来更新数据库中的这些值,但有些操作需要原子事务.有没有人知道如何在不通过视图的情况下使模型方法成为django中的完整事务?
理想情况下,我希望能够在方法的开头启动事务并在最后提交它,然后只需能从任何地方(视图或cronjob)调用该方法,并保证该方法是原子的.
如果您知道如何执行此操作,我还需要知道,如果提交失败(由于同时写入等),事务会自动重新尝试,或者我是否必须手动捕获失败异常并重新调用该方法.
谢谢.
我正在构建一个工具,当异常向上传播时,有关异常上下文的新数据会被添加到异常中.问题是,当异常到达顶级时,所有额外的上下文数据都存在,但只显示最新的堆栈跟踪.是否有一种简单的方法可以让异常显示抛出它的原始堆栈跟踪而不是最后一个堆栈跟踪,或者我应该在第一次异常传播时执行类似抓取原始堆栈跟踪的操作?
例如,以下代码:
def a():
return UNBOUND
def b():
try:
a()
except Exception as e:
raise e
b()
Run Code Online (Sandbox Code Playgroud)
产生以下异常:
Traceback (most recent call last):
File "test.py", line 8, in <module>
b()
File "test.py", line 7, in b
raise e
NameError: global name 'UNBOUND' is not defined
Run Code Online (Sandbox Code Playgroud)
在理想情况下,我想以某种方式向用户显示:
Traceback (most recent call last):
File "test.py", line 8, in <module>
File "test.py", line 2, in a
return UNBOUND
NameError: global name 'UNBOUND' is not defined
Run Code Online (Sandbox Code Playgroud)
因为这将用户指向最初发生错误的行.
我正在尝试建立一个简单的clojure项目,我不确定如何在项目之间加载文件.我确定答案在文档中,但我找不到任何地方的简单答案,我不知道在哪里看.
基本上,我的目录看起来像这样:
Clojure/
clojure/
clojure.jar
other clojure files
clojure-contrib/
clojure-contrib.jar
other contrib files
project/
main.clj
utils.clj
Run Code Online (Sandbox Code Playgroud)
我希望main.clj是这样的:
(ns project.main
(:require project.utils))
(greet)
Run Code Online (Sandbox Code Playgroud)
和utils.clj是这样的:
(ns project.utils)
(defn greet [] (println "Hello, World!"))
Run Code Online (Sandbox Code Playgroud)
但那失败了:
Exception in thread "main" java.io.FileNotFoundException: Could not locate project/utils__init.class or project/utils.clj on classpath: (main.clj:1)
Run Code Online (Sandbox Code Playgroud)
当我试图运行它.我的类路径包括顶层Clojure/目录和两个jar.我也尝试将project/目录放在类路径中,没有运气.
你如何建立一个简单的clojure项目?
我正在尝试在HTML5画布上编写一个流畅的动态模拟器.我在互联网上发现了一些非常酷的东西,它们总是看起来像一个很有前途的起点,但它们都是基于细胞的,并且使用了一些疯狂的数学.
我希望能够添加任意障碍(任何方向的线条,圆圈等)以使事情更有趣,但我不知道从哪里开始.
有没有人知道一些相当简单的流体模拟方程,包括任何方向的障碍?或者,是否有人能指出我需要采用上述例子中的一个并增加障碍?
我知道这个问题与我应该问的数学倒流有关,但它们似乎更多地涉及理论的东西.如果我在错误的地方,请道歉.我真的不知道从哪里开始 - 如果有人在之前使用任意障碍进行流体模拟,我可以使用一些指针.
这里的准确性在简单性方面落后了.
谢谢!
我正在尝试将python 3.6的新__init_subclass__功能(PEP 487)与abc模块一起使用.它似乎没有工作.以下代码:
from abc import ABCMeta
class Initifier:
def __init_subclass__(cls, x=None, **kwargs):
super().__init_subclass__(**kwargs)
print('got x', x)
class Abstracted(metaclass=ABCMeta):
pass
class Thingy(Abstracted, Initifier, x=1):
pass
thingy = Thingy()
Run Code Online (Sandbox Code Playgroud)
运行时产生以下结果:
Traceback (most recent call last):
File "<filename>", line 10, in <module>
class Thingy(Abstracted, Initifier, x=1):
TypeError: __new__() got an unexpected keyword argument 'x'
Run Code Online (Sandbox Code Playgroud)
如果Abstracted不使用ABCMeta元类,一切正常.
这个错误是相当有弹性的,例如,下面的代码仍然失败并出现类似的类型错误(可能是因为元类' __new__在类实例化时运行,而父类' __new__在对象实例化之前不会运行).
from abc import ABCMeta
class Initifier:
def __new__(cls, name, bases, dct, x=None, **kwargs):
return …Run Code Online (Sandbox Code Playgroud) 我想在vimscript中编写一个函数,找到一行中最后一个打开的括号或括号.这不一定是一个简单的问题,因为它需要能够处理以下所有问题:
function(abc
function(abc, [def
function(abc, [def], "string("
function(abc, [def], "string(", ghi(
Run Code Online (Sandbox Code Playgroud)
如您所见,嵌套括号,不同符号和字符串标记都需要智能处理.这甚至可能吗?是否有使用vimscript正则表达式的工具来进行上下文感知搜索,这些搜索知道未闭合括号和字符串中的括号之间的区别?
鉴于您可以使用语法突出显示不平衡括号,应该可以在一行上找到最后一个未闭合的括号/括号.如何才能做到这一点?
在使用GHC的DataKinds时,我尝试了实现类型级二进制nat.它们很容易实现,但如果我希望它们在常见情况下有用,那么GHC需要相信Succ类型族是单射的(因此类型推断至少与一元类型级别一样有效) NATS).但是,我很难说服GHC这是事实.考虑以下二进制nat的编码:
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeFamilyDependencies #-}
module Nat2 where
data Nat = Zero | Pos Nat1
data Nat1 = One | Bit0 Nat1 | Bit1 Nat1
-- by separating Nat and Nat1 we avoid dealing w/ Bit0^n Zero as a spurrious representation of 0
type family Succ (n :: Nat) :: r | r -> n where
Succ 'Zero = 'Pos 'One
Succ ('Pos x) = …Run Code Online (Sandbox Code Playgroud) 我正在使用raphael javascript库,我想用鼠标绘制一条直线.我想让用户单击某处,放置路径的单个点,然后让线跟随鼠标直到再次单击,此时线将永久放置在画布上.
现在唯一的方法就是在他们点击时创建一个路径,在移动鼠标时不断移除和重绘它,然后再次点击时再次创建它,跟踪整个绘图模式.虽然这有效,但它有点复杂和混乱(特别是建立'Mx yLx y'字符串来定义新路径),我想知道是否有更好的方法来做到这一点.关于路径的raphael文档有点不尽如人意.
谢谢!
上下文:我正在尝试生成一个错误monad,它也会跟踪警告列表,如下所示:
data Dangerous a = forall e w. (Error e, Show e, Show w) =>
Dangerous (ErrorT e (State [w]) a)
Run Code Online (Sandbox Code Playgroud)
即Dangerous a是一个操作导致(Either e a, [w])哪里e是可显示的错误并且w是可显示的.
问题是,我似乎无法真正运行这件事,主要是因为我不太了解存在类型.注意:
runDangerous :: forall a e w. (Error e, Show e, Show w) =>
Dangerous a -> (Either e a, [w])
runDangerous (Dangerous f) = runState (runErrorT f) []
Run Code Online (Sandbox Code Playgroud)
这不会编译,因为:
Could not deduce (w1 ~ w)
from the context (Error e, Show e, Show w)
... …Run Code Online (Sandbox Code Playgroud) 我有以下样板,我经常这样做,并希望消除.它看起来像这样:
type Configured = ReaderT Config
doSomething :: Configured IO Data
doSomething = do
getMeta <- asks getMetaData
meta <- liftIO getMeta
Run Code Online (Sandbox Code Playgroud)
我想减少到这样的事情:
doSomething = do
meta <- find getMetaData
Run Code Online (Sandbox Code Playgroud)
不幸的是,我还没有完全关注monad变形金刚.是什么类型的find?是(Config -> IO Result) -> Result吗?我怎么写呢?
任何提示/解释,以帮助我grok monad变形金刚非常感谢.
谢谢!
haskell ×3
javascript ×2
monads ×2
python ×2
canvas ×1
clojure ×1
data-kinds ×1
django ×1
exception ×1
html5 ×1
python-3.6 ×1
raphael ×1
transactions ×1
vim ×1
viml ×1